2

私は以下を利用していました:

public event EventHandler OnComplete = delegate { };

これがどのように呼び出されるのかわかりませんが、これは「イベントのデフォルト初期化子」ですか??

しかし、EventArgs から派生させ、独自の EventHandler を作成し、同じアプローチを使用することにしたときに問題が発生したようです。参照してください:

public class MyEventArgs : EventArgs
{
    int result;
    public int Result
    {
        get
        {
            if (exceptionObject == null)
                return result;
            else
                throw new InvalidOperationException();
        }
        internal set { result = value; }
    }

    Exception exceptionObject;
    public Exception ExceptionObject
    {
        get { return exceptionObject; }
        internal set { exceptionObject = value; }
    }
}

public delegate EventHandler MyEventHandler(object sender, MyEventArgs e);

public class MyOperation
{
    public event MyEventHandler OnOperationComplete = delegate { };
}

だから、ライン

public event MyEventHandler OnOperationComplete = delegate { };

問題を引き起こします。

「自分の」イベントの適切なデフォルト初期化を行うにはどうすればよいですか?

4

1 に答える 1

4
public event MyEventHandler OnOperationComplete = (sender, args) => { return null; };

また、次のように言うつもりだったと思います。

public delegate void MyEventHandler(object sender, MyEventArgs e);

いいえ

public delegate EventHandler MyEventHandler(object sender, MyEventArgs e);
于 2012-07-27T03:02:29.947 に答える