第五章 方法
1、方法是一块具有名称的代码
包括:方法体、方法头
局部变量必须被赋值才可以执行下面的操作。实例变量有隐式初始化。有时候,类型推断可以用var关键字,类似于C++当中的auto。用于局部变量。
C#中,不能在第一个名称的有效范围内去声明另一个同名的本地变量。
2、本地常量:局部常量。Const 关键字。Const double PI = 3.1415926; 在编译期决定其值。
3、 参数:形参与实参。参数也有几种:值参数/引用参数。
值类型与值参数是两种不同的概念:值类型就是类型本身包含其值。而值参数是把实参的值复制给形参。
Void mymethod(myclass f1, int f2)
{
F1.val += 5;
F2+= 5;
}
调用: mymethod(a1,a2);
执行过程:
方法开始时,系统在栈中为形参分配空间,并从实参复制值。a1为引用类型,所以引用被复制,但指向相同。
在使用引用参数时,必须加关键字 ref。 void method(ref int val){ xxxx }, 方法调用 method(ref y);//必须使用变量。
举例:
Void mymethod(ref myclass f1,ref int f2)
{
F1.val += 5;
F2+= 5;
}
调用: mymethod(ref a1,ref a2);
执行过程:不会开辟新的内存单元,只是把形参名设置为实参的别名而已。a1与f1,引用相同的位置。
引用类型作为值参数和引用参数:
我们修改引用参数的成员时,无论是作为值参数还是引用参数,效果都一样。但,当我们去修改引用类型本身时,那么其作为值参数与引用参数是不同的。
请看下面的图形:
4、输出参数
需要加关键字 out
Void mythod(out int val); //形参也是实参的别名,且我们通过方法体之后就会知道你传入的实参的值。方法体内部会对实参赋值。
5、参数数组
前面是一个实参对应一个形参,现在是多个实参对应一个特殊的形参。
关键字:params 比如 void mythod(params int[] vals){ }
调用: int[] arrays = {1, 2 ,3}; mythod(arrays);
调用时,如果是用值类型传递,即实参是值,数组参数是值类型,实参不受影响。
如果是引用类型传递,即实参是数组名,数组参数是引用类型,实参受方法内部影响。
6、方法重载
方法名称相同,方法特征不同即可。
7、命名参数
给参数命名,这样我们可以以任意顺序调用。
Void mythod(int a, int b, int c);
参数的名字和值: 调用时指定名称和值即可。 Mythod(c:2, a:4, b: 1);
8、可选参数
就是我们在调用时,可以调用这个参数,也可以省略这个参数。这时,必须在声明的时候给参数提供默认值。
Void mythod(int a, int b, int c = 2);
先是必填参数+ 可选参数+ params 参数。
9、栈帧:就是一个个方法进栈。