C#事件订阅

时间:2009-02-24 20:10:13

标签: c# events language-features

在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,偶数)

4 个答案:

答案 0 :(得分:2)

除非您想要做一些不同的事情,否则显式实现添加/删除方法没有任何好处。可能的原因:

  • 也许你自己控制事件支持代码(直接链接到其他事件,而不是通过无意义的级联,例如)
  • 在添加或删除时另外执行其他操作
  • 更改添加或删除
  • 的安全要求
  • 公开基础代理

默认实现的作用是维护一个私有隐藏委托字段,每次添加或删除委托时都会替换该字段。对于大多数情况,没有必要进行上述任何操作,但灵活性就在那里。

答案 1 :(得分:1)

如果除了添加或删除指针之外还有需要运行的特定逻辑,则第二个可以选择准确控制指定事件订阅或取消订阅时发生的事件。

答案 2 :(得分:1)

您可以使用私有字段上的[field:NonSerialized()]属性从序列化中排除委托。

答案 3 :(得分:1)

您可以在后者上放置断点以进行调试。有时这可能真的有用(虽然在调试后我将它切换回前者)。