C#4.0 命名参数可选参数

  c#4.0中新特性之一就是:命名参数和可选参数。 

命名参数:调用方法时,可以不按位置传递参数,而是指定参数的命名来传值;

private void Func(string str,int number,bool flag){}

对于上面的函数,使用命名参数调用时可以是 Fun(flag:true,number:10,str:“zhangsan”);

可选参数:声明方法中的参数时,可以为其设置默认值,那么在调用该方法时,这种可选参数是可以忽略的;必须遵循以下几个原则:

     1.可选参数必须有个编译时常量作为其默认值。如果是除String之外的引用类型(包括那个特殊的dynamic类型),默认值只能是null。

      private void Func(string str,int a=10,People p=new People())这个声明是编译不过的;

     2.可选参数必须在非可选参数之后出现,可选参数右边的参数(如果有的话)必须是可选参数。

      private void Func(string str,int a=10,bool flag)这个声明也是编译不过的;

以  private void Func(string name, int age = 10, bool sex = false) {///do something; }为例说明对命名参数和可选参数的调用方法: 

this.Func("zhangSan");//忽略全部可选参数
this.Func(sex: true, age: 30, name: "zhangsan");//采用命名参数,可以调换顺序;
this.Func("zhangsan", 20);//使用依次使用前面可选参数,可以不加可选参数名称;
this.Func("zhangsan", 30, true);//使用全部可选参数,可以不加可选参数名称;
this.Func("zhangsan", sex: false);//使用后面的可选参数,则必须使用可选参数名称;this.Func("zhangsan",  false);是编译不了的;
this.Func("zhangsan", age: 40);

以上调用方式都正确;

原文地址:https://www.cnblogs.com/rpoplar/p/2687110.html