第二部分 设计类型:第9章 参数
9.1 可选参数和命名参数
方法的参数可以设计为部分或全部分配默认值。还可以通过指定参数名称的方式为其传递实参。
以下代码演示了可选参数和命名参数的用法:
9.2 隐式类型的局部变量
9.3 以传引用的方式向方法传递参数
值类型的传给方法的是实例的一个副本,调用者中的实例不受影响。所以out和ref对引用类型才有意义,对值类型没意义。
传递引用使用关键字out和ref:
out:参数不必初始化,在方法返回前必须给参数赋值。
ref:参数必须先初始化,在方法中可以对参数进行读和写。
9.4 向方法传递可变数量的参数
上面代码可简化为:
params关键字告诉编译器向参数应用System.ParamArrayAttribute的一个实例。
C#编译器检测到一个方法调用时,先会检查所有具有指定名称、同时参数没有应用ParamArrayAttribute的方法,如果找到一个匹配的方法,编译器就会生成调用它所需的代码。如果编译器没找到一个匹配的方法,会接着检查应用了ParamArrayAttribute的方法。如果找到一个匹配的方法,编译器会先生成代码来构建一个数组,填充它的元素,再生成代码来调用选定的方法。
写一个方法来获取任意数量、任意类型的参数:
9.5 参数和返回类型的指导原则
•参数类型:尽量用最弱的类型(宽泛的类型),最好是接口而不是基类。
例如,如果要用方法处理一组数字项,最好用接口IEnumerable<T>来声明方法的参数,而不要用强数据类型(比如List<T>)或者更强的接口类型(ICollection或IList<T>);
•返回类型:尽量具体。如果想以后修改,可以返回更宽泛的类型。
为了方便以后修改,可以返回宽泛的类型:
9.6 常量性