原来方法也可以这样使用

设计一个方法的参数时,可为部分或者全部参数分配默认值。然后调用这些方法的代码可以 选择不指定部分实参接受其默认值。除此之外调用方法时还可以指定参数名称的方式为其传递参数。例如有如下方法时:(针对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);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值