第8章方法 ,,2 8.1实例方法和静态方法 个类的方法代码只有一份,它们的生命期和类是一致的,所谓的实例方法 是指通过对象名调用的方法,静态方法与类关联,而不是与对象关联,定义 静态方法时要使用 static关键字,调用静态方法时要使用类名,而不是对象名 静态方法不能直接访问非静态的字段,静态字段可以被所有方法所访问。 方法由方法头和方法体两部分组成。 实例方法的定义格式为: 修饰符返回类型方法名(参数列表) 方法体 定义静态方法的格式为 修饰符 static返回类型方法名(参数列表) 方法体
第8章 方法 一个类的方法代码只有一份,它们的生命期和类是一致的,所谓的实例方法 是指通过对象名调用的方法,静态方法与类关联,而不是与对象关联,定义 静态方法时要使用static关键字,调用静态方法时要使用类名,而不是对象名。 静态方法不能直接访问非静态的字段,静态字段可以被所有方法所访问。 方法由方法头和方法体两部分组成。 实例方法的定义格式为: 修饰符 返回类型 方法名 (参数列表) { 方法体 } 定义静态方法的格式为: 修饰符 static 返回类型 方法名 (参数列表) { 方法体 } ◼ 8.1 实例方法和静态方法
82值传递、引用传递和ref参数 参数传递 值传递:实参将值拷贝给形参,系统要为形参开设存储空间,以接受 传递的值,此时形参成为一个实在的局部变量,从此实参和形参脱离关系, 形参在方法中参与运算,在运算中的发生的任何变化都不会影响实参 ●引用传递:实参将自己的引用,也就是自己数据在存储器中的地址拷 贝给形参,这时形参如同实参的别名,系统不必为形参开设存储空间,形 参在方法中的任何改变就是实参的改变,所以引用参数既是方法的输入, 又是方法的输出,引用传递的形参需要用ref关键字声明,调用方法时的实 参也要添加ref关键字 ●对于属性、事件、索引器和用户定义的运算符来说,它们的参数总是 作为值参数传递的。这些成员类别不支持引用参数和输出参数(out)。 C#的数据类型有值类型和引用类型两种,所以参数传递时,在形式上有四 种情况:值类型参数进行值传递、引用类型参数进行值传递、值类型参数 进行引用传递、引用类型参数进行引用传递
8.2 值传递、引用传递和ref参数 参数传递: ◼l 值传递:实参将值拷贝给形参,系统要为形参开设存储空间,以接受 传递的值,此时形参成为一个实在的局部变量,从此实参和形参脱离关系, 形参在方法中参与运算,在运算中的发生的任何变化都不会影响实参; ◼l 引用传递:实参将自己的引用,也就是自己数据在存储器中的地址拷 贝给形参,这时形参如同实参的别名,系统不必为形参开设存储空间,形 参在方法中的任何改变就是实参的改变,所以引用参数既是方法的输入, 又是方法的输出,引用传递的形参需要用ref关键字声明,调用方法时的实 参也要添加ref关键字。 ◼l 对于属性、事件、索引器和用户定义的运算符来说,它们的参数总是 作为值参数传递的。这些成员类别不支持引用参数和输出参数(out)。 C#的数据类型有值类型和引用类型两种,所以参数传递时,在形式上有四 种情况:值类型参数进行值传递、引用类型参数进行值传递、值类型参数 进行引用传递、引用类型参数进行引用传递
83out参数和 params参数(1) 831 params参数 般情况下,方法的输入是通过参数列表规定的,输入参数的个数不能随 着实际调用的需要而改变, params参数则提供了这样一种方便,例如, 有n组数据,每一组数据个数都不一样,但都要求平均数,在C#中,借助 params参数,只要定义一个方法就可以完成这样的灵活功能。 params参数也称为参数数组。 params参数是具有一维数组性质的数组类 型的参数,例如一维数组,或者交错数组,但不能是多维数组; params参数实际上是不定长的数组,定义形参时要使用 params关键字 不需要指定长度,在调用时,实参不需要用 params关键字,实参可以是 任意个数的元素,也可以是一个同类型的数组。 params参数只能作为参数列表的最后一个参数。 params参数不能再用ref或out修饰
8.3 out参数和params参数 (1) ◼ 8.3.1 params参数 一般情况下,方法的输入是通过参数列表规定的,输入参数的个数不能随 着实际调用的需要而改变,params参数则提供了这样一种方便,例如, 有n组数据,每一组数据个数都不一样,但都要求平均数,在C#中,借助 params参数,只要定义一个方法就可以完成这样的灵活功能。 params参数也称为参数数组。params参数是具有一维数组性质的数组类 型的参数,例如一维数组,或者交错数组,但不能是多维数组; params参数实际上是不定长的数组,定义形参时要使用params关键字, 不需要指定长度,在调用时,实参不需要用params关键字,实参可以是 任意个数的元素,也可以是一个同类型的数组。 params参数只能作为参数列表的最后一个参数。 params参数不能再用ref或out修饰
83out参数和 params参数(2) ■832out参数 般情况下,一个方法只有一个返回值,返回数据是一种输出的方式, ref修饰的参数,或者是引用类型参数,它们既是输入,又是输出,out参 数提供了更灵活的输出方式。 out参数也称为输出参数。和ref参数类似,用out修饰的参数,直接将引 用传递给方法,不在存储器中为参数开设新的空间,但是,和ref参数不 样,调用方法前并不需要对参数作初始化,正因为如此,在out参数没 有被显式赋值之前,不能使用,在方法结束前应该对out参数赋值。 调用方法时,也要用out修饰实参,并且实参必须是变量,不能是属性 表达式。 ou参数可以用在实例方法、静态方法和实例构造函数中,不能用在属性 和索引器中
8.3 out参数和params参数 (2) ◼ 8.3.2 out参数 一般情况下,一个方法只有一个返回值,返回数据是一种输出的方式, ref修饰的参数,或者是引用类型参数,它们既是输入,又是输出,out参 数提供了更灵活的输出方式。 out参数也称为输出参数。和ref参数类似,用out修饰的参数,直接将引 用传递给方法,不在存储器中为参数开设新的空间,但是,和ref参数不 一样,调用方法前并不需要对参数作初始化,正因为如此,在out参数没 有被显式赋值之前,不能使用,在方法结束前应该对out参数赋值。 调用方法时,也要用out修饰实参,并且实参必须是变量,不能是属性、 表达式。 out参数可以用在实例方法、静态方法和实例构造函数中,不能用在属性 和索引器中
84局部变量 在程序中,任何变量都有生命期、作用域和可见性的变化。C#中 没有在类外的全局变量的概念,所有的变量都在类中定义。局部 变量是在局部语法区域中被产生、起作用和终止的临时变量,C# 的局部的语法区域是指方法或方法内的代码块。 变量在类中,称为字段,局部变量的声明、赋值和字段没有差别, 但是局部变量的生命期和作用域开始于被声明的那一点,只有在 被赋值后,才能使用,当定义变量的方法,或者代码块结束时 局部变量也结束了生命。在同一个作用域中不能有同名的变量
8.4 局部变量 在程序中,任何变量都有生命期、作用域和可见性的变化。C#中 没有在类外的全局变量的概念,所有的变量都在类中定义。局部 变量是在局部语法区域中被产生、起作用和终止的临时变量,C# 的局部的语法区域是指方法或方法内的代码块。 变量在类中,称为字段,局部变量的声明、赋值和字段没有差别, 但是局部变量的生命期和作用域开始于被声明的那一点,只有在 被赋值后,才能使用,当定义变量的方法,或者代码块结束时, 局部变量也结束了生命。在同一个作用域中不能有同名的变量