2017-05-05 6 views
1

代理人またはイベントの呼び出しに使用できる?.演算子は、競合条件を回避しますか?競合状態を避ける?演算子

例:手動で競合状態を避ける:

//The event-invoking method that derived classes can override. 
     protected virtual void OnShapeChanged(ShapeEventArgs e) 
     { 
      // Make a temporary copy of the event to avoid possibility of 
      // a race condition if the last subscriber unsubscribes 
      // immediately after the null check and before the event is raised. 
      EventHandler<ShapeEventArgs> handler = ShapeChanged; 
      if (handler != null) 
      { 
       handler(this, e); 
      } 
     } 

ソース:msdn

+0

はいを​​評価します。 https://codeblog.jonskeet.uk/2015/01/30/clean-event-handlers-invocation-with-c-6/ – vcsjones

答えて

2

はい

くらいで、スレッドセーフな方法で代表者 を呼び出しているヌル条件メンバーにアクセスするための別の用途少ないコード。

...

コンパイラは にコードを生成するための新しい方法は、スレッドセーフではのPropertyChanged 1時間だけ

MSDN Source

+0

thx btw msdnの例は、仮想メソッドをオーバーライドしないでも動作します。なぜそれが分かっていますか? –

+0

@GernotAtStackoverflowどのような仮想メソッドを参照していますか? – MrZander

+0

保護された仮想void OnShapeChanged(ShapeEventArgs e) –

関連する問題