是否可以在C#中订阅事件订阅?

时间:2012-05-07 14:33:24

标签: c# events

如果我有这样的事件:

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

并添加一个这样的事件处理程序:

MyEvent += MyEventHandlerMethod;

...然后可以以某种方式注册吗?换句话说 - 是否可能有类似的东西:

MyEvent.OnSubscribe += MySubscriptionHandler;

5 个答案:

答案 0 :(得分:11)

与自动实现的属性类似,默认情况下也会自动实现事件。

您可以按如下方式展开event的声明:

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

例如,请参阅How to: Use a Dictionary to Store Event Instances (C# Programming Guide)

请参阅Events get a little overhaul in C# 4, Part I: Locks,了解C#3和C#4之间自动实现的事件的不同之处。

答案 1 :(得分:6)

可以专门声明事件访问器,即添加和删除访问器。

这样做可以在添加新事件处理程序时执行自定义逻辑。

答案 2 :(得分:1)

当您定义事件时,实际上您可以使用较长的格式在人们附加事件或从事件中删除自己时执行更多代码。

查看addremove关键字的信息。

答案 3 :(得分:1)

您可以声明自定义事件,例如伪代码

class MyClass
{


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


    ...
}

答案 4 :(得分: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