C#:用可选参数重载构造函数&;命名参数

本文关键字:参数 amp 构造函数 重载 | 更新日期: 2023-09-27 18:25:43

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

public FooClass(string name = "theFoo")
{ fooName = name; }
public FooClass(string name, int num = 7, bool boo = true) : this(name)
{ fooNum = num; fooBool = boo; }

可以这样使用命名参数吗。。。?

FooClass foo1 = new FooClass(num:1);  

//我只传递一个命名的参数,依靠期权来处理其余的

或者在没有参数的情况下调用构造函数FooClass(string,int,bool)?如…

FooClass foo2 = new FooClass();

C#:用可选参数重载构造函数&;命名参数

使用命名参数和可选参数会以以下方式影响过载解决:

  • 如果方法、索引器或构造函数的每个参数都是可选的,或者按名称或位置与调用语句中的单个参数相对应,并且该参数可以转换为参数的类型,则该方法、索引程序或构造函数可以执行。

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

  • 如果两个候选者被判断为同样优秀,则优先选择一个没有可选参数的候选者,该参数在调用中被省略。这是对具有较少参数的候选者的过载解决方案的普遍偏好的结果。

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

可选参数定义在参数列表的末尾,在任何必需参数之后。如果调用者为一系列可选参数中的任何一个提供参数,那么它必须为前面的所有可选参数提供参数。参数列表中不支持逗号分隔的间隙。

此外,

命名参数可以跟在位置参数后面,如下所示。计算BMI(123,身高:64);但是,位置参数不能跟在命名参数后面。以下语句导致编译器错误。//计算BMI(体重:12364);