1

CA1026によると: 既定のパラメーターを使用しないでください。既定のパラメーターを使用することは想定されていません。

MSDN は、メッセージを抑制しないように言っています。

このルールからの警告を抑制しないでください。

ただし、メソッドの CLSCompliant バリエーションを含めると、このメッセージを抑制できますか? または、同じメソッドの 2 つのバリエーションがあり、1 つはすべてデフォルトのパラメーターで、もう 1 つは空で、問題が発生しますか?

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

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

MSDN の提案を無視しても問題ないでしょうか? メソッド (コンストラクター) を明確にマークし、CLSCompliant(false)デフォルト値を取らないメソッド (コンストラクター) を提供しています。


補足:これは次の理由で適切に行われているようです。

コンパイラは、マネージ コードにアクセスするときに、C++ のマネージ拡張の既定のパラメーターの値を無視します。

...だから、この方法でコンパイルすると問題が発生するのだろうか?

4

1 に答える 1

2

実際には、引数のない 2 つのコンストラクターはありません。デフォルト値はコンパイル時にのみ消費され、デフォルトのパラメーター値をサポートするコンパイラーには、通常、対象となるメソッドを解決するための規則もあります。

とはいえ、パラメーターなしでオーバーライドがあるのに、わざわざデフォルト値を指定する必要があるのはなぜですか? 人々がデフォルトのパラメータ値を好む主な理由は、わざわざオーバーロードを書きたくないからです。

于 2011-06-22T17:29:15.433 に答える