总结:CLR Via C#(第八章):其他(方法传递、out、ref)
通过引用向方法传递参数:
1、Out与ref的区别:
如果方法的参数标记为out,参数可以不初始化,但必须在返回之前对对象赋值;
如果方法的参数标记为ref,参数必须在调用之前初始化;
也就是说,对大量值类型使用关键字out后,代码效率会提高;
2、CLR允许基于方法对out和ref参数的使用来重载方法,但仅存在out和ref差异的方法是不允许的;
static void Add(int i)
{
}
static void Add(out int i)
{
}
如果加入下面方法,就会出错
//Error:“Add”不能定义仅在ref 和out 上有差别的重载方法
static void Add(ref int i)
{
}
向方法传递可变数量的参数:
关键字params是应用于方法签名的最后一个参数;
private static Int32 Add(params Int32[] values) {
// NOTE: it is possible to pass the 'values'
// array to other methods if you want to.
Int32 sum = 0;
for (Int32 x = 0; x < values.Length; x++)
sum += values[x];
return sum;
}
private static void DisplayTypes(params Object[] objects) {
foreach (Object o in objects)
Console.WriteLine(o.GetType());
}
注意:对可接受可变参数数量的方法的调用会导致一些额外的性能损失;
最好的方法是对方法进行重载;
声明方法的参数类型:
声明方法的参数类型时,尽可能指定弱类型;
方法的返回类型,尽量指定强类型;
如果为了保留更多的灵活性,返回类型可以指定弱类型;