更新:これは、コード分析オプション[生成されたコードからの結果の抑制(管理対象のみ)]がオフになっていて、ルールセットが[MicrosoftBasic設計ガイドラインルール]に設定されている場合に発生します。
2013-04-26に、Microsoftはこれがバグであることを確認しましたが、このバージョンまたは次のバージョンのVisualStudioでは修正されません。
nullをチェックする必要を避けるために、空のデリゲートでイベントハンドラーを初期化することがよくあります。例えば:
public EventHandler SomeEvent = delegate {};
ただし、Visual Studio 2012(RTM)でコードの一部をコンパイルし始めてから、派生クラスの多くのイベントがCA1601をトリガーしていることに気付きました。VisualStudio2012のコード分析で基本クラスメソッドの警告を非表示にしないでください。
警告をトリガーするサンプルは次のとおりです。
using System;
using System.ComponentModel;
[assembly: CLSCompliant( true )]
namespace TestLibrary1
{
public abstract class Class1
{
public event PropertyChangedEventHandler PropertyChanged = delegate {};
}
public class Class2 : Class1
{
// this will cause a CA1061 warning
public event EventHandler SelectionCancelled = delegate { };
}
public class Class3 : Class1
{
// this will not cause a CA1061 warning
public event EventHandler SelectionCancelled;
}
}
注:VS2012では、.NET4.5または.NET4.0のいずれかでコンパイルされたときに警告がトリガーされます。同じサンプルは、VS2010で警告をトリガーしません。
パフォーマンス上の理由はさておき、空のデリゲートでイベントを初期化するべきではない正当な理由はありますか?デフォルトの想定では、これはおそらくVisualStudio2012での分析の癖にすぎません。
VS2012にまだアクセスできないユーザーのコード分析結果は次のとおりです。
CA1061基本クラスメソッドを非表示にしないより具体的な基本クラスメソッド「Class1.Class1()」を非表示にするため、「Class2.Class2()」を変更または削除します。TestLibrary1 Class1.cs 14
補遺:コード分析で「生成されたコードからの結果を抑制する」オプションがオフになっていることがわかりました。
また、これは、基本タイプのイベントハンドラーが次の両方の場合に発生するようです。
- EventHandlerまたはEventHandler以外のデリゲート-および-
- 基本クラスと派生クラスの両方のイベントは、匿名メソッドまたは空のデリゲート(インラインまたはコンストラクターのいずれか)を使用して初期化されます。
関連性の可能性:リリース候補の上にインプレースでインストールされたVisual Studio2012RTMを実行しています。