根据CA1026: Default parameters should not be used,我不应该使用默认参数。
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个参数?
答案 0 :(得分:2)
实际上,没有2个没有参数的构造函数。默认值仅在编译时使用,并且支持默认参数值的编译器通常也会有一个规则来解析要定位的方法。
那就是说,为什么在没有参数的情况下你有一个覆盖,你为什么还要指定一个默认值呢?人们喜欢默认参数值的主要原因是他们不想打扰写入重载。