1

C#での利点は何ですか

public class blah
{

       public event EventHandler Blahevent;

}

public class blah
{

      private event EventHandler blahevent;

      public event EventHandler Blahevent
      {
          add
              {
                  blahevent+=value;
              } 
              remove
              {
                  blahevent-=value
              }
      }

}

またはその逆。

最初のものはblahinstance.Blahevent=null、またはblahinstance.Blahevent(obj、even)にあなたを開きますか

4

4 に答える 4

2

別のことをしたい場合を除いて、add/removeメソッドを明示的に実装する利点はありません。考えられる理由:

  • おそらく、イベントバッキングコードを自分で制御します(たとえば、無意味なカスケードを経由するのではなく、他のイベントに直接リンクするため)
  • 追加または削除時にさらに何か他のことをする
  • 追加または削除のセキュリティ要求を変更する
  • 基になるデリゲートを公開する

デフォルトの実装では、デリゲートが追加または削除されるたびに置き換えられるプライベートの非表示のデリゲートフィールドを維持します。ほとんどの場合、上記のいずれかを実行する必要はありませんが、柔軟性はあります。

于 2009-02-24T20:14:02.337 に答える
1

2つ目は、ポインターの追加または削除に加えて実行する必要のある特定のロジックがある場合に、指定されたイベントがサブスクライブまたはサブスクライブ解除されたときに何が発生するかを正確に制御するオプションがあります。

于 2009-02-24T20:12:58.767 に答える
1

プライベート フィールドの [field: NonSerialized()] 属性を使用して、デリゲートをシリアル化から除外できます。

于 2009-02-24T20:25:10.000 に答える
1

デバッグ目的で、後者にブレークポイントを配置できます。時々、これは本当に便利です (ただし、デバッグ後に元に戻します)。

于 2009-02-24T21:50:00.763 に答える