:
次に、この基本クラスから継承するクラスでは、あなただけのイベントを発生させるためにOnFinishedまたはOnLoadingメソッドを呼び出すことができますデリゲートを実際に保持するシーンの背後にプライベートインスタンス変数を作成します。これを行う..
public event EventHandler MyPropertyChanged;
実際にこれを行っています。
private EventHandler myPropertyChangedDelegate;
public event EventHandler MyPropertyChanged
{
add { myPropertyChangedDelegate += value; }
remove { myPropertyChangedDelegate -= value; }
}
とこれをやって...
MyPropertyChanged(this, EventArgs.Empty);
は実際にこれです...
myPropertyChangedDelegate(this, EventArgs.Empty);
だから、(明らかに)のみ宣言内からプライベートデリゲートのインスタンス変数にアクセスすることができますクラス。
大会が宣言クラスでこのような何かを提供することです。..
protected virtual void OnMyPropertyChanged(EventArgs e)
{
EventHandler invoker = MyPropertyChanged;
if(invoker != null) invoker(this, e);
}
あなたは、イベントを呼び出すためにどこにでも、そのクラス内または継承階層構造の下からOnMyPropertyChanged(EventArgs.Empty)
を呼び出すことができます。
そうでない場合は行うには、いくつかの理由がありますしない限り、これらの方法は、仮想保護する必要があります。 –
なぜ仮想であるべきですか?継承者がイベントを発生させる方法を変更したいと思えば、私は仮想を宣言しますが、ほとんどの場合、これを行う理由はありません。 –
ガイドラインによると、マイクロソフトは、継承者が、さらに、Onプロテクトメソッドはイベント引数を取る必要があります。この答えは、Adam Robinsonの正しい答えと比べて間違っています。 – meandmycode