可能性の重複: 空のイベントハンドラを常に追加しても問題ありませんか?
が空を割り当てる任意の欠点がある:(C#で)イベントハンドラを使用する場合public event Action handler; … // some method: if(handler != null) handler();
Is there a downside to adding an anonymous empty delegate on event declaration?
次のパターンは、非常に一般的ですこのイベントにデリゲートしますか?これにより、イベントが発生したどこの場所でもif !=null
の状態が保存されます。もちろん、これは、イベントが常に適切な代理人に割り当てられることを保証できない場合にのみ適用されます。
public event Action handler;
…
// in constructor:
handler +=()=>{};
…
// some method:
handler();
確かに、そこにわずかなパフォーマンスヒットだが、それは、コードがはるかにきれいになります。そのような場合のベストプラクティスは何ですか?技術的に不利な点はありますか?
私の見解からは、良い習慣ではありません。はい、ヌルチェックを保存しますが、数か月後にバグや保守のコードを調べると、最初の例はコードの目的をよりよく示しています。 – Steve
これはさらに悪化します。保護なしでは、nullのチェックと起動の間に 'handler'がnullに設定されることがあります。 'handler'の値をローカル変数にコピーし、nullには_that_をチェックする必要があります。 –
'handler'の値をローカル変数にコピーしないので、最初のコードが壊れています。 – CodesInChaos