2011-04-19 47 views
3

当在声明此事件的类内部使用字段事件SomeNews的名称时,此名称不引用事件本身,而是引用编译器创建的匿名私有代理D ,并且由于该原因D可以间接地经由SomeNews();字段事件和匿名代理

class MyClass 
{ 
     public event MyDelegate SomeNews; 
      ... 
} 

调用(内部MyClass)但是,如果代替MyClass通过同时指定addremove存取声明事件SomeNews

class MyClass 
{ 
     private delegate MyDelegate _someNews; 
     public event MyDelegate SomeNews 
     { 
      add 
      { 
       _someNews += value; 
      } 

      remove 
      { 
       _ someNews -= value; 
      } 
     } 

     ... 
} 

然后甚至在MyClass之内SomeNews这个名字是指事件本身而不是底层代表_someNews?我假设这因为尝试通过SomeNews()调用_someNews代表将导致编译时错误说“SomeNews事件只能出现在的+ =或左边 - =

感谢名单

+0

试试看并找出答案? – 2011-04-19 18:26:49

回答

3

看起来你已经回答了你自己的问题。是的,当使用全体事件语法时,引用声明类中的事件与在任何其他类中引用该事件没有什么不同。这是因为,像属性一样,编译器不知道你在addremove块中实际做了什么。

没有什么说你必须创建一个简单的事件,它只是添加和删除底层委托的值,或者你必须对提供的值做任何事情。因此,不可能通过在代码中调用它来“调用”事件,因为编译器不知道如何调用事件

+0

thanx多为您的帮助 – user702769 2011-04-19 18:41:20