次のような私のカスタムEventArgsを使用します。
public event EventHandler<MyEventArgs> SampleEvent;
msdnから 例:
public class HasEvent
{
// Declare an event of delegate type EventHandler of
// MyEventArgs.
public event EventHandler<MyEventArgs> SampleEvent;
public void DemoEvent(string val)
{
// Copy to a temporary variable to be thread-safe.
EventHandler<MyEventArgs> temp = SampleEvent;
if (temp != null)
temp(this, new MyEventArgs(val));
}
}
2つの質問があります:
1)マークされたコードを見る:
別のパラメータにコピーする必要がある理由がわかりません(スレッドに関して)
keyowrdがあるevent
ので、誰もその呼び出しリストに触れることはできません(つまり、クラスの部外者コードはありません)
2)私が間違っていなければ、 DemoEvent
関数は仮想である必要があります。これにより、サブクラスでオーバーライドできます...(どこかで見たことがあると思います)
奇妙なことに、resharperも仮想を追加しません:
したがって、このコードがある場合:
それは私を示唆しています:
そして私がそれを押すと:
もう一度私の2つの質問:
1) EventHandler<MyEventArgs> temp = SampleEvent;
スレッドの安全性に関して、この行が解決するシナリオは何ですか?
2)関数はすべきではありませんvirtual
か?(私はこのパターンを仮想で見たことがあると確信しています)