public ClassType(string type) {
Type = type;
}
public ClassType(string type,bool isArray=false) {
Type = type;
IsArray = isArray;
}
ClassType ct = new ClassType("adsf");
哪个构造选择?C#默认可选参数选择器
public ClassType(string type) {
Type = type;
}
public ClassType(string type,bool isArray=false) {
Type = type;
IsArray = isArray;
}
ClassType ct = new ClassType("adsf");
哪个构造选择?C#默认可选参数选择器
不需要可选参数的重载。请注意,这里只是一个“是”或“否”的决定:“没有自动填充的可选参数”比“自动填充一些可选参数”更可取,但在填入1或2之间没有偏好。暧昧)
从C#4规范的7.5.3.2节:
否则如果M P的所有参数具有 相应的参数,而 默认参数需要是 取代至少M中的一个可选 参数 Q然后M P优于 M Q。
正如乔恩说,在两个词,第一个。比赛是'更清洁'。
是不是“第一个”三个字,不是两个? ;) – 2010-07-13 13:06:49
是的,但'用三个字'听起来不太酷:-) – Mau 2010-07-13 13:08:19
这引发了一个问题,“为什么不是编译时错误?” (我非常确定它是用C++编写的,C#为C++允许的更多边缘情况提供了错误。) – 2010-07-13 14:10:56
@James:有一种方法与您给出的参数完全匹配,所以我认为它被认为是没事的。我怀疑它可以更容易地将可选参数添加到现有类型。 – 2010-07-13 14:28:20
顺便说一句:我刚刚将该代码移植到VC++,并确认至少使用该编译器时,它是一个错误。我认为C++ 98标准使它总是一个错误。奇怪的是,C#让它通过。我想这是为了让您将以前需要的参数转换为可选参数,但在这种情况下,您真的想知道您是否创建了一个模糊。 – 2010-07-13 14:59:33