CA1026: Default parameters should not be usedによると、私はデフォルトのパラメータを使用するはずがありません。この ルールから警告を抑制しないCA1026 - 代替、CLS準拠の方法が提供されている場合は、このメッセージを抑制できますか?
:
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++のためのマネージド 拡張のため デフォルトパラメータの値を無視します:ので、これは所定の位置にあるようです。
...だから、私は技術的に今は0のパラメータを取ることができる2つのコンストラクタを持っているので、このように問題を引き起こすでしょうか?
そこでMicrosoft FxCopの警告を回避する方法が不明です。 MSDNは、メッセージを抑制するのではなく、修正するように指示しています。私は中間地点を見つけようとしました。一つのメソッドをパラメータ化し、 'CLSCompliant(false)'とマークし、パラメータ化されていないメソッドを提供しています...主にデフォルト値を供給するメソッドです。次に、おそらく私はこれを行う方法を考え直す必要があります... –
単にデフォルト値を削除するだけで、呼び出し元に機能が失われることなくFxCop違反が解決されます。 –
デフォルトパラメータを使用せずにコールサイトを満たすことができるメソッド呼び出しが存在する場合、デフォルトパラメータは無視されます。存在しない言語がデフォルトパラメータをサポートしている場合は、そのパラメータが使用されます。言語がデフォルトパラメータをサポートしていない場合、コンパイラは*を呼び出し、呼び出し側が呼び出しサイト*で希望する値を指定する必要があります。私はデフォルトパラメータを持っている人がそれをサポートしていない言語を使用している発信者にとって有害であるとは思わない。呼び出し元は、デフォルトが指定されていない場合に必要なコードと同じコードを記述するだけで済みます。 – supercat