02010603 方法03-方法重载、命名参数与可选参数、栈帧、递归
02010603 方法03-方法重载、命名参数与可选参数、栈帧、递归
1. 方法重载
- 一个类中可以声明多个同名的方法,这叫做方法的重载。
- 使用相同名称的每个方法必须有一个和其它方法不同的签名。方法的标签由如下信息组成,它们在方法声明的方法头中。
- 方法的名称
- 参数的数目
- 参数的数据类型和顺序
- 参数修饰符
- 注意:返回类型不是方法签名的一部分;形参的名称也不是方法签名的一部分。
2. 命名参数
2.1 位置参数
- 本系列笔记至此用到的所有参数都是位置参数,位置参数是指每一个实参的位置都必须与相应的形参位置对应。
2.2 命名参数
- C#允许显式指定参数的名字,就可以任意顺序在方法中列出实参,这就是命名参数。命名参数细节如下。
- 命名参数和位置参数在方法声明时没有不同,形参已经有名字了。
- 在调用方法的时候,命名参数在形参的名字后面跟着冒号和实际的参数值或表达式。
public int Cal(int a, int b, int c) // 方法声明时位置参数和命名参数没有不同
{
...
}
c.Cal(10, 20, 30); // 位置参数调用形式
c.Cal(a:1, b:2, c:3); // 命名参数调用形式
↑ ↑ ↑
命名参数 命名参数 命名参数
2.3 位置参数和命名参数混用
- 在方法调用的时候,位置参数和命名参数可以混用,但是所有的位置参数必须先列出。
public int Cal(int a, int b, int c)
{
...
}
c.Cal(20, a:10, c:30); // 正确调用形式
c.Cal(a:10, 20, 30); // 错误调用形式
3. 可选参数
3.1 什么是可选参数
- 可选参数 → 在调用方法的时候可以包含这个参数,可以省略它。为了表明某个参数是可选的,需要在方法声明的时候为该参数提供默认值。
public int Cal(int a, int b=2); // b是可选参数
c.Cal(10); // 此时2将作为默认值传递给形参b。
c.Cal(10, 20); // 此时显式值20传递给形参b。
3.2 可选参数注意事项
- 不是所有参数类型都可以作为可选参数
- 只要值类型的默认值在编译时可以确定,就可以使用值类型作为可选参数。
- 只有在默认值是null的时候,引用类型才可以作为可选参数。
- 只有值参数可以作为可选参数,其它如ref,out,params都不可以作为默认参数。
- 值类型的值参数可以作为可选参数。
- 引用类型只有默认值为null时才可以作为值参数。
- 所有必填参数必须在可选参数之前声明。如果有params参数,必须在可选参数后面声明。
void MyFunc(首先声明必填参数, 然后声明可选参数, 最后声明params参数);
4. 栈帧
- 局部变量和参数时位于栈上面的。在调用方法的时候,内存从栈的顶部开始分配,保留和方法关联的一些数据项,这块内存就叫做方法的栈帧。栈帧包含的内存保存如下内容。
- 返回地址,也就是方法在退出的时候代码继续执行的位置。
- 分配内存的参数,也就是方法的值参数,还可能是参数数组(如果有的话)。
- 和方法调用相关的其它管理数据项。
- 在方法调用时,整个栈帧会压入栈。在方法退出的会后,整个栈帧都会从栈上弹出。
5. 递归
- 方法可以调用其它方法。方法也可以调用自身,这叫做递归。
结尾
书籍:C#图解教程
著:【美】丹尼尔 · 索利斯;卡尔 · 施罗坦博尔
译:窦衍森;姚琪琳
ISBN:978-7-115-51918-4
版次:第5版
发行:人民邮电出版社
※敬请购买正版书籍,侵删请联系85863947@qq.com※
※本文章为看书或查阅资料而总结的笔记,仅供参考,如有错误请留言指正,谢谢!※

浙公网安备 33010602011771号