1.基本函数传参注意点
参数可以通过引用或通过值传递给方法。在变量通过引用传递给方法时 ,被 调用的方法得到的
就是这个变量 ,所 以在方法内部对变量进行的任何改变在方法退出后仍旧有效。而如果变量通过值
传送给方法 ,被调用的方法得到的是变量的 一 个相同副本 ,也 就是说 ,在 方法退出后 ,对 变量进行
的修改会丢失,也就是修改无效。
例如 ,
a.int 通过值传递给方法 ,对 应方法对该 血 的值所做的任何改变都没有改变原 int对象的值。
b.但如果把数组或其他引用类型 (如类) 递给方法 ,对 应 的 方法就会使用该引用改变这个
数组中的值 ,而 新值会反射在原始数组对象上。
注意字符串的行为方式有所不同 ,因 为字符串是不可变的,如果改变字符串的值 ,就 会创建 一 个
全新的字符串 , 所以 字 符 串 无法采用 一般引用 类型的行为方式。在方法调角中 ,对 字符串所做的任
何改变都不会影响原始字符串 。
那么,有没有什么办法可以实现值类型调用完方法后也能改变值呢?那就是下面的ref 和out关键字
2.ref关键字
如前所述 ,通 过值传送变量是默认的 ,也 可以道使值参数通过引角传送给方法。为此 ,要 使用
ref关 键字。如果把一 个参数传递给方法 ,且 这个方法的输入参数前带有 ref关 键字 ,则 该方法对变
量所做的任何改变都会影响原始对象的值 :
static void someFunction( intI] intarr ref int i)
{
ints[0]= 100;
i = 100; // The change to i will persist after someFunction() exits.
)
在调用该方法时 ,还 需要添加 ref关 键字 :
最后 ,C#仍要求对传递给方法的参数进行初始化 ,理 解这一点也非常重要。在传递给方法之前 ,
无论是按值传递 ,还 是按引用传递 ;任 何变量都必须初始化。
3. out参数
C#要求变量在被引用前必须用 一 个初值进行初始化。尽管在把输入变量传递给函数前 ,
可 以用没有意义的值初始化它们 ,因 为函数将使用真实、有意义的值初始化它们 ,但 是这样做
是没有必要的 ,有 时甚至会引起混乱。但有 一 种方法能够简化α编译器所坚持的输入参数的初始化。
编译器使用 out关 键字来初始化。在方法的输入参数前面加上 out前缀时 ,传 递给该方法的变
量可以不初始化。该变量通过引用传递 ,所 以在从被调用的方法中返回时 ,对 应方法对该变量进行
的任何改变都会保留下来。在调用该方法时 ,还 需要使用 out关 键字 ,与 在定义该方法时 一 样
4.可选参数
参数也可以是可选的。必须为可选参数提供默认值。可选参数还必须是方法定义的最后 =个 参
数。所以下面的方法声明是不正确的 :
void TestMethod(int ptionaNumber = 10,int notoptiona1Number)
{.....}
要使这个方法正常工作 ,就 必须在最后定义 notoptiona1Number参
数。
5.方法的重载
C#支持方法的重载 一 — 方法的几个版本有不同的签名 (即 ,方 法名相同 ,但 参数的个数和 /或 类
型不同 )。 为了重载方法 ,只 需声明同名但参数个数或类型不同的方法即可
以上为函数快记录笔记,主要注意 1.基本函数传参注意点,2.ref关键字 和 3.out关键字
WangDrama
2017-09-04