您的位置:首页 > 其它

原来方法也可以这样使用

2016-02-03 09:13 405 查看
设计一个方法的参数时,可为部分或者全部参数分配默认值。然后调用这些方法的代码可以 选择不指定部分实参接受其默认值。除此之外调用方法时还可以指定参数名称的方式为其传递参数。例如有如下方法时:(针对MSC 4.0以上的版本,包括4.0)

public static void M(Int32 x=9,String s=”A”,DateTime dt=default(DateTime),Guid guid=new Guid()){

Console.WriteLine(“x={0},s={1},dt={2},guid={3}”,x,s,dt,guid);

}

调用方法有如下:

M();//等同于M(9,”A”,default(DateTime),new Guid());

M(8,”X”);//等同于M(8,”X”,default(DateTime),new Guid());

下面这个对我而言是新知识点:

M(5,guid:Guid.NewGuid(),dt:DateTime.Now);//等同于M(5,”A”,DateTime.Now,Guid.NewGuid());

在定义 的方法中,如果为部分参数指定了默认值,请注意下述这些额外的规则和原则:

1) 可以为方法、构造器方法和有参属性(索引器)的参数指定默认值。还可为属于委托定义一部分的参数指定默认值。然后,在调用该委托类型的一个变量时,可以省略实参,接受默认值。

2) 有默认参数的参数必须放在没有默认参数的所有参数后面。换言之,一旦定义了一个有默认值的参数,它右边的所有参数也必须有默认值。要注意:参数数组这种参数必须放在所有参数(包括有默认值的)这些之后,而且数组本身不能有一个默认值。

3) 默认值必须是编译时能确定的常量值。

4) 不要有重命名参数变量。否则任何调用者如果以传参数名的方式传递实参,都必须修改他们的代码。

5) 如果方法是从模块的外部调用,更改参数的默认值具有潜在的危险性。如果以后修改了参数的默认值,但没有重新编译,调用者在调用你的方法时就会传递老的默认值。可以考虑将默认值设为0/null作为哨兵使用。这样一来即使更改了默认值,也不必重新编译包含调用者的代码。如下面的例子:

private static String CreateFilePath(string fileName=”file”)

{

return string.Format(“@”c:{0}.txt”,fileName);

}

//较好的例子

private static String CreateFilePath(string fileName=null)

{

return string.Format(“@”c:{0}.txt”,fileName??”file”);

}

6) 如果参数用ref或者out关键字进行标识,就不能设定默认值。因为没有办法为这些参数传递一个有意义的值。

7)实参可按任何顺序传递,但是命名实参只能出现在实参列表的尾部。

8)可按名称将实参传递给没有默认值的参数。但是编译器要想编译代码,所有要求的实参必须传递(按名称或者位置)。

如果参数需要ref/out,为了以参数名的方式传递实参,请使用如下的语法:

//方法

private static void M(ref Int32 x){}

//调用

Int32 a=5;

M(x:ref a);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: