読者です 読者をやめる 読者になる 読者になる

イベントを発生させるEventHandler<T>用拡張メソッド

ネタ元→ちょっとイケてるINotifyPropertyChangedの実装 - present

上の記事を読み返していて、ふと思った。イベントを発生させる EventHandler 拡張メソッドを用意すれば、いろんなところで使えるんじゃないか?

public static class EventHandlerExtensions
{
    // EventHandler<T> 用拡張メソッド。
    // イベントを発生させる。
    public static void Raise<T>(this EventHandler<T> self, object sender, T e) where T : EventArgs
    {
        if (self != null)
        {
            self(sender, e);
        }
    }
}

public class GreetCompletedEventArgs : EventArgs
{
    public GreetCompletedEventArgs(string result)
    {
        Result = result;
    }
    public string Result { get; private set; }
}

public class Greeting
{
    public void Greet(string name)
    {
        string result = string.Format("Hello, {0}.", name);

        // イベント発生
        GreetCompleted.Raise(this, new GreetCompletedEventArgs(result));
    }

    public event EventHandler<GreetCompletedEventArgs> GreetCompleted;
}

単純にイベントを発生させるだけなら、このメソッドを使えばいいな。