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

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

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

于 2012-05-07T14:36:54.790 回答
1

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

查看有关添加删除关键字的信息。

于 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 回答