参数
可选参数和命名参数
设计方法参数时,可为部分或全部参数分配默认值。
调用方法时可通过指定参数名称来传递实参。
规则与原则:
- 可为方法、构造器方法、有参属性的参数指定默认值。
- 有默认值的参数必须放在没有默认值的所有参数之后,除了参数数组。
- 默认值必须是编译时能确定的常量值。
- 不要重命名参数变量。
- 更改参数的默认值具有潜在的危险性。
- 如果参数用ref或out关键字,就不能设置默认值。
调用方法时: - 实参可按任意顺序传递,但命名实参只能出现在尾部。
- C#不允许省略逗号之间的实参。
隐式类型的局部变量
var能很好的用于foreach,using,for语句。
var只是简化语法,并且只能用于方法内部的局部变量。(与dynamic区分)
以传引用的方式向方法传递参数
CLR默认所有方法参数都是传值。
传递引用类型对象时,对象引用(指向对象的指针)被传给方法。方法能修改对象,而调用者能看到这些修改。
对于值类型的实例,传给方法的是实例的一个副本,调用者中的实例不受影响。
C#使用关键字out或ref来允许传引用而非传值。
CLR不区分out和ref,在C#中决定了由哪个方法负责初始化所引用的对象。
out表明不指望调用者在调用方法之前初始化好对象,被调用方法不能读取参数的值,并需要在返回前向这个值写入。
ref表明调用者必须在调用方法前初始化参数的值,被调用的方法可以读写。
向方法传递可变数量的参数
params只能应用于方法签名中的最后一个参数。
params关键字告诉编译器向参数应用定制特性System.ParamArrayAttribute的一个实例。
参数和返回类型的设计规范
声明方法的参数类型时,应尽可能指定最弱的类型,宁愿要接口也不要基类。
例如使用IEnumerable
将方法的返回类型声明为最强的类型。但是为了保持一定灵活性,也可以选择一个较弱的类型。
常量性
CLR没有提供对常量对象/实参的支持。