6

このようなイベントがある場合:

public delegate void MyEventHandler(object sender, EventArgs e);
public event MyEventHandler MyEvent;

そして、次のようなイベントハンドラーを追加します。

MyEvent += MyEventHandlerMethod;

...それでは、これをなんとかして登録することは可能ですか?言い換えれば、次のようなものを持つことは可能ですか?

MyEvent.OnSubscribe += MySubscriptionHandler;
4

5 に答える 5

11

自動実装プロパティと同様に、イベントもデフォルトで自動実装されます。

event次のように an の宣言を展開できます。

public event MyEventHandler MyEvent
{
    add
    {
        ...
    }
    remove
    {
        ...
    }
}

たとえば、「方法: ディクショナリを使用してイベント インスタンスを格納する (C# プログラミング ガイド)」を参照してください。

自動実装されたイベントが C# 3 と C# 4 でどのように異なるかについては、「C# 4 でのイベントのオーバーホール、パート I: ロック」を参照してください。

于 2012-05-07T14:37:03.323 に答える
6

イベント アクセサー、つまり add アクセサーと remove アクセサーを明確に宣言することができます。

そうすることで、新しいイベント ハンドラーが追加されたときにカスタム ロジックを実行できるようになります。

于 2012-05-07T14:36:54.790 に答える
1

イベントを定義するとき、実際には長い形式を使用して、人々がイベントに自分自身を追加または削除したときに、より多くのコードを実行できます。

addおよびremoveキーワードに関する情報を確認してください。

于 2012-05-07T14:38:10.873 に答える
1

次の疑似コードのように、カスタム イベントを宣言すると可能です。

class MyClass
{


    public event EventHandler MyEvent
    {
        add    {     //someone subscribed to this event  ! }
        remove {     //someone unsubscribed from this event ! }
    }


    ...
}
于 2012-05-07T14:38:46.987 に答える
1

イベントアクセサーを探していると思います。サブスクライバーへの参照をカスタマイズする方法。これがあなたがそれを行う方法です

public class TestClass
{

   private event EventHandler UnderlyingEvent;
   public event EventHandler TestEvent
   {
        add
        {
             UnderlyingEvent += value;
        }
        remove
        {
             UnderlyingEvent -= value;
        }
   }
}

詳細については、こちらの記事をご覧ください

http://msdn.microsoft.com/en-us/magazine/cc163533.aspx

于 2012-05-07T14:42:25.110 に答える