2010-07-13 105 views
1
public ClassType(string type) { 
     Type = type; 
    } 
    public ClassType(string type,bool isArray=false) { 
     Type = type; 
     IsArray = isArray; 
    } 


    ClassType ct = new ClassType("adsf"); 

哪个构造选择?C#默认可选参数选择器

回答

7

不需要可选参数的重载。请注意,这里只是一个“是”或“否”的决定:“没有自动填充的可选参数”比“自动填充一些可选参数”更可取,但在填入1或2之间没有偏好。暧昧)

从C#4规范的7.5.3.2节:

否则如果M P的所有参数具有 相应的参数,而 默认参数需要是 取代至少M中的一个可选 参数 Q然后M P优于 M Q

+0

这引发了一个问题,“为什么不是编译时错误?” (我非常确定它是用C++编写的,C#为C++允许的更多边缘情况提供了错误。) – 2010-07-13 14:10:56

+0

@James:有一种方法与您给出的参数完全匹配,所以我认为它被认为是没事的。我怀疑它可以更容易地将可选参数添加到现有类型。 – 2010-07-13 14:28:20

+0

顺便说一句:我刚刚将该代码移植到VC++,并确认至少使用该编译器时,它是一个错误。我认为C++ 98标准使它总是一个错误。奇怪的是,C#让它通过。我想这是为了让您将以前需要的参数转换为可选参数,但在这种情况下,您真的想知道您是否创建了一个模糊。 – 2010-07-13 14:59:33

1

正如乔恩说,在两个词,第一个。比赛是'更清洁'。

+0

是不是“第一个”三个字,不是两个? ;) – 2010-07-13 13:06:49

+0

是的,但'用三个字'听起来不太酷:-) – Mau 2010-07-13 13:08:19