提供事件封装C#?

提供事件封装C#?

问题描述:

有人可以解释事件如何为访问代理提供封装,除此之外,您不能使用运算符=运算符,但只能使用+=-=。我不明白的部分是这样的:提供事件封装C#?

public delegate void CarEngineHandler(string msgForCaller); 

public CarEngineHandler listOfHandlers; 

如果这是public,那么我们就可以做到这一点listOfHandlers.invoke("hello");。我得到了,但事件如何提供封装?

public events CarEngineHandler listOfHandlers; 

listOfHandlers("hello"); //fire the event 

是否触发事件并调用委托,只要你想要?封装在哪里?

+0

也许你可以解释什么_you_意思是“封装”?听起来你正在寻找“保护”或“隐藏”。 – 2013-03-18 20:23:39

Events只能由提供它们的类来解雇。你可以订阅一个班级的公开活动,但不能从另一个班级开火。

有关事件请参阅MSDN

事件通过允许响应事件发生在对象之外而发生封装,而对象仍然不知道该信息。

class A 
{ 
    private event Action _event; 
    public event Action Event { add { _event += value; } remove { _event -= value; } } 
    int counter = 0; 
    public void AddOne() 
    { 
     counter++; 
     if (counter > 0) 
     { 
      OnEvent(); 
     } 
    } 
    private void OnEvent() 
    { 
     if (_event != null) 
      _event(); 
    } 
} 
class Program 
{ 
    int Main() 
    { 
     string outsidestring = "THE CLASS HAS NO IDEA WHO I AM"; 
     A a = new A(); 

     a.Event += new Action(()=>Console.WriteLine(outsidestring)); 

     while (true) 
     { 
      Console.ReadLine(); 
      a.AddOne(); 
     } 
    } 
} 

在这个例子中,当A的反击命中10可以做的事情outsidestring不用知道了外界的字符串什么。