System.EventArgs は、null オブジェクト パターンのバリアントを実装します。開発者は、null の代わりに EventArgs.Empty を使用して、"ここには何も意味がない" 状況を指定します。
派生イベント引数クラスを使用して独自のイベントを宣言していContosoEventArgs
ます。消費者が次のようなものを渡すことができるのは当然だと思いますContosoEventArgs.Empty
(EventArgs.Empty
これは基本クラスのインスタンスを割り当てようとするため、機能しません)派生クラスの変数に)、慣れているように。ただし、これは実装が難しいです。Empty 静的プロパティは、派生クラスで設定できる保護されたプロパティ IsEmpty に依存していません。もしそうなら、私は次のようなことができます:
public class ContosoEventArgs : EventArgs
{
public static ContosoEventArgs Empty
{
get
{
return new ContosoEventArgs{IsEmpty=true};
}
}
}
素敵できれい!
ただし、そのようなプロパティは存在せず、私の知る限り、EventArgs インスタンスの空さをテストする唯一の方法は、EventArgs.Empty と比較することです。これは、特殊なイベント引数をベース EventArgs
代わりに null を許可する必要がありますか? フレームワーク自体で彼らが行ったことはほとんど同じだと思います-MouseEventArgsとImageClickEventArgsはnullオブジェクトパターン実装の痕跡を示しません
それとも、3番目のオプションを見落としていますか?