2009-02-24 145 views
1

在C#是什么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,偶数)

+0

你能做到 blahinstance.Blahevent = null 或blahinstance.Blahevent(obj,even),如果它只是一个公共? – maxfridbe 2009-02-24 20:28:35

回答

2

除非你想做一些不同的事情,否则显式实现add/remove方法没有任何优势。可能的原因:

  • 也许采取事件后盾代码自己(直接链接到其他一些事件,而不是去虽然例如一个毫无意义的级联)
  • 做别的事情,除了添加或删除
  • 的控制在添加
  • 更改安全需求或删除
  • 露出下面的委托

什么的默认实现所做的是保持自己的私人藏委托场是REPL每次代表添加或删除代表时都会发生。对于大多数情况,不需要做任何上述操作,但灵活性在那里。

1

第二个具有控制指定事件订阅确切地会发生什么的选项或如果除了添加或删除指针之外还有需要运行的特定逻辑,则取消订阅。

1

您可以使用专用字段上的[field:NonSerialized()]属性将序列化中的委托排除在外。

+0

我不明白?事件是否被序列化? – maxfridbe 2009-02-24 20:27:44

1

为了调试目的,您可以在后者上放置一个断点。有时这可能是确实有用(虽然调试后我将其切换回前者)。