2013-03-18 65 views
1

有人可以解釋事件如何爲訪問代理提供封裝,除此之外,您不能使用運算符=運算符,但只能使用+=-=。我不明白的部分是這樣的:提供事件封裝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

回答

3

Events只能由提供它們的類來解僱。你可以訂閱一個班級的公開活動,但不能從另一個班級開火。

有關事件請參閱MSDN

0

事件通過允許響應事件發生在對象之外而發生封裝,而對象仍然不知道該信息。

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不用知道了外界的字符串什麼。