1

在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,even)

4

4 回答 4

2

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

  • 也许自己控制事件支持代码(例如直接链接到其他事件而不是通过毫无意义的级联)
  • 在添加或删除时做其他事情
  • 更改添加或删除的安全要求
  • 暴露底层委托

默认实现所做的是维护一个私有隐藏委托字段,每次添加或删除委托时都会替换该字段。在大多数情况下,不需要执行上述任何操作,但灵活性是存在的。

于 2009-02-24T20:14:02.337 回答
1

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

于 2009-02-24T20:12:58.767 回答
1

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

于 2009-02-24T20:25:10.000 回答
1

您可以在后者上放置断点以进行调试。有时这可能非常有用(尽管在调试后我将其切换回前者)。

于 2009-02-24T21:50:00.763 回答