C#:使用可选参数和命名参数重载构造函数?

use*_*895 6 c# optional-parameters named-parameters

这不是关于正确编码实践的问题,我只是在研究语义.假设我有以下构造函数......

public FooClass(string name = "theFoo")
{ fooName = name; }

public FooClass(string name, int num = 7, bool boo = true) : this(name)
{ fooNum = num; fooBool = boo; }
Run Code Online (Sandbox Code Playgroud)

因此可以使用命名参数......?

FooClass foo1 = new FooClass(num:1);  
Run Code Online (Sandbox Code Playgroud)

//我只传递一个命名参数,依靠选项来处理其余的事情

或者没有参数调用构造函数FooClass(s​​tring,int,bool)?如......

FooClass foo2 = new FooClass();
Run Code Online (Sandbox Code Playgroud)

Rob*_*vey 6

使用命名和可选参数会以下列方式影响重载解析:

  • 一种方法,索引器,或构造为执行一个候选它的每一个参数的任是可选的还是对应,通过名称或位置,以便在调用语句的单个参数,并且参数可以被转换成参数的类型.

  • 如果找到多个候选项,则首选转换的重载解析规则将应用于显式指定的参数.忽略可选参数的省略参数.

  • 如果判断两个候选者同样好,则优先选择没有可选参数的候选者,该参数在调用中被省略.这是对具有较少参数的候选者的重载分辨率的一般偏好的结果.

http://msdn.microsoft.com/en-us/library/dd264739.aspx

  • 要让它用`num`参数调用重载,你还必须提供`name`参数.由于您没有在第二个重载中为`name`参数指定可选值,*它不是可选参数.* (2认同)