0.局部函数
/// <summary>
///下面例子中,InnerMethod是一个局部函数,它在OuterMethod方法内部定义
///局部函数InnerMethod可以访问OuterMethod中的变量,比如outerVariable
///需要注意的是,局部函数只在其封装的上下文中有效
///局部函数是C#7.0及更高版本中的一个新特性
/// </summary>
public void OuterMethod()
{
int outerVariable = 10;
//声明局部函数
void InnerMethod()
{
int innerVariable = 20;
int sum = innerVariable + outerVariable;
Console.WriteLine($"The sum is: {sum}");
}
InnerMethod(); // 调用局部函数
}
1.方法的声明:
[方法修饰符] 返回值类型 方法名 ([形参列表]) {方法体}
方法的调用:
对象.方法名([实参列表]);
形参是定义方法的参数列表,实参是调用方法时传给方法的参数列表,有参数值
2.如果方法体内仅仅有一行代码,则可以简写成Lambda表达式形式:
int Sum(int x,int y){retun x+y;}
简写:int sum(x,y)=>x+y;
3.参数数组params,也称可变参数, 表示函数的参数是个数可变的
用于表示参数类型相同,但参数数量不确定.
调用含参数数组的方法时,若实参是数组则按引用传递,若实参是变量则按值传递
且传入的实参必须是与形参类型匹配的一维数组或N个的匹配类型的数据.如
static void M1(params string[] strs){//...}
string[] strs_Params = new string[]{"Lily","Lucy","Jim","David","ZhangSan"};
M1(strs_Params);
或
M1("ZhangSan","LiSi","Wangwu");
如果方法定义了多个参数,则params修饰的参数数组要放到最后,并且只能使用一次。
4.命名参数:调用方法时可以不按照形参列表顺序传递实参,按照“形参名:实参”的对应关系,一一传递.
对象.方法名(形参1:实参1,形参2:实参2,形参3:实参3..形参N:实参N)
优点:
调用方法时,可以不按照形参顺序给参数赋值;只需要将参数和参数值用冒号分开,一一对应即可
可选参数也可以这么用.如
void Display(int a,int b=2,int c =3)
{
//statements
}
Diaplay(b:5,c:8,a:1)//清晰明了
5.方法的重载(overloading):方法同名且签名不同的可以重载:参数数量不同,参数类型不同,参数传递方式不同,可以重载.
6.和分部类(partial)一样,也有分部方法
分部方法在分部类的部分A中声明分部方法定义,而在分部类的部分B中声明分部方法实现
7.外部方法external method
当方法声明包含 extern 修饰符时,称该方法为外部方法(external method)。
外部方法是在外部实现的(通常为dll库函数),故外部方法声明不提供任何实际实现,其方法体只由一个分号组成。
外部方法不可以是泛型。
extern 修饰符通常与 DllImport特性一起使用,以引用由 DLL(动态链接库)实现的外部函数。
当外部方法包含 DllImport特性时,该方法声明必须同时包含一个 static 修饰符
8.递归方法:递归本身就是一个循环,递归的本质就是自己调用自己
9.out参数:在方法内必须赋值,一个方法可以有多个out参数
10 ref参数:在调用方法前,必须给ref实参进行赋值
11 可选参数,放在必选参数后面,在定义可选参数时,需要给可选形参赋个初始值,调用方法不传入指定的可选参数值时,会传入默认的可选参数值.