第九章 参数
1. 概述
本章重点讲述向方法传递参数的各种方式,包括如何可选的指定参数,按名称指定参数,按引用传递参数,以及如何定义方法来接收可变数量的参数。
2. 名词解释
3. 主要内容
3.1 可选参数和命名参数
可选参数的一些规则和原则:
① 可以为方法、构造器方法和有参属性(C#索引器)的参数指定默认值。还可为委托定义中的参数指定默认值。
② 有默认值的参数必须放在没有默认值的所有参数之后。
③ 默认值必须是编译时能确定的常量值。
④ 注意不要重命名参数变量。
⑤ 如果方法是从模块外部调用的,更改参数的默认值具有潜在的危险性。
⑥ 如果参数用ref或out标识了,就不能设置默认值。
命名参数的一些规则和原则:
① 命名参数只能出现在实参列表的尾部。
② 可按名称将实参传给没有默认值的参数。但是,所有要求的实参都必须传递。
③ C#不允许省略逗号之间的实参。可以以传参数名的方式实现。
* C#中,用DefaultParameterValueAttribute 和 OptionalAttribute 来实现可选参数。
3.2 隐式类型的局部变量
针对一个方法中的局部变量,C#允许根据初始化表达式的类型来推断它的类型。(var)
3.3 以传引用的方式向方法传递参数
在C#中,使用关键字ref或out来实现。
3.4 向方法传递可变数量的参数
params关键字告诉编译器向参数应用 System.ParamArrayAttribute 的一个实例。
① 只有方法的最后一个参数才可以用params关键字来标记。
② params只能标识任意类型的一个一维数组。
③ 可变参数会造成额外的性能损失。建议用重载代替params。
3.5 参数和返回类型的指导原则
① 声明方法的参数时,应尽量指定最弱的类型,最好是接口而不是基类。
② 相反,一般最好是将方法的返回类型声明为最强的类型。
3.6 常量性
在某些语言中(比如非托管C++),可将方法或参数声明为常量,从而禁止实例方法中的代码更改对象的任何字段。
CLR没有提供对常量对象/实参的支持。
4. 总结
基本涵盖了CLR中参数的类型和传递方式。但是IL部分涉及较少,可以自己看一下。