【问题标题】:C# Default optional parameter chooserC# 默认可选参数选择器
【发布时间】:2010-07-13 12:40:26
【问题描述】:
    public ClassType(string type) {
        Type = type;
    }
    public ClassType(string type,bool isArray=false) {
        Type = type;
        IsArray = isArray;
    }


    ClassType ct = new ClassType("adsf");

选择哪个构造函数?

【问题讨论】:

    标签: c# .net parameters constructor optional-parameters


    【解决方案1】:

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

    来自 C# 4 规范的第 7.5.3.2 节:

    否则如果MP的所有参数都有 一个相应的论点,而 默认参数需要是 替换为至少一个可选的 MQ 中的参数,则 MP 优于 MQ.

    【讨论】:

    • 这引发了一个问题,“为什么这不是编译时错误?” (我很确定它是用 C++ 编写的,而且 C# 在 C++ 允许的更多边缘情况下会出现错误。)
    • @James:有一种方法与您给出的参数完全匹配,所以我想它被认为是好的。我怀疑它可以更轻松地向现有类型添加可选参数。
    • 顺便说一句:我刚刚将该代码移植到 VC++ 并确认至少使用该编译器,这是一个错误。我认为 C++98 标准使它总是一个错误。奇怪的是 C# 让它通过了。我想这是为了让您将以前需要的参数转换为可选参数,但在这种情况下,您真的想知道您是否创建了歧义。
    【解决方案2】:

    正如乔恩所说,用两个词来说,第一个。匹配更“干净”。

    【讨论】:

    • “第一个”不是三个字,不是两个? ;)
    猜你喜欢
    • 2016-06-12
    • 1970-01-01
    • 2011-02-13
    • 2011-07-04
    • 1970-01-01
    • 2012-05-26
    • 2012-10-21
    • 2013-10-08
    • 1970-01-01
    相关资源
    最近更新 更多