1

根据CA1026:不应使用默认参数我不应该使用默认参数。

MSDN 说不要压制消息:

不要禁止来自该规则的警告。

但是,我想知道...如果我包含该方法的 CLSCompliant 变体,我可以禁止显示此消息吗?或者是否有相同方法的两种变体,一种具有所有默认参数,一种为空,会导致问题?

public class Foo
{
    public Foo()
        : this(0)
    {
    }

    [CLSCompliant(false)]
    [SuppressMessage("Microsoft.Design", "CA1026:DefaultParametersShouldNotBeUsed")]
    public Foo(Int32 id = 0)
    {
        //...
    }
}

忽略 MSDN 的建议会是一个好的情况吗?我清楚地将方法(构造函数)标记为CLSCompliant(false)并提供不采用任何默认值的方法(构造函数)。


附注:这似乎是因为:

编译器在访问托管代码时会忽略 C++ 托管扩展的默认参数值。

...所以,我想知道我是否以这种方式编译会导致问题,因为我现在在技术上拥有 2 个可以采用 0 个参数的构造函数?

4

1 回答 1

2

实际上,您没有 2 个没有参数的构造函数。默认值仅在编译时使用,支持默认参数值的编译器通常还会有一个规则来解析目标方法。

也就是说,既然你有一个没有参数的覆盖,你为什么还要费心指定一个默认值呢?人们喜欢默认参数值的主要原因是他们不想费心编写重载。

于 2011-06-22T17:29:15.433 回答