第九章 参数

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部分涉及较少,可以自己看一下。

原文地址:https://www.cnblogs.com/stone_lv/p/4308848.html