提供事件封装C#?
问题描述:
有人可以解释事件如何为访问代理提供封装,除此之外,您不能使用运算符=
运算符,但只能使用+=
和-=
。我不明白的部分是这样的:提供事件封装C#?
public delegate void CarEngineHandler(string msgForCaller);
public CarEngineHandler listOfHandlers;
如果这是public
,那么我们就可以做到这一点listOfHandlers.invoke("hello");
。我得到了,但事件如何提供封装?
public events CarEngineHandler listOfHandlers;
listOfHandlers("hello"); //fire the event
是否触发事件并调用委托,只要你想要?封装在哪里?
答
事件通过允许响应事件发生在对象之外而发生封装,而对象仍然不知道该信息。
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不用知道了外界的字符串什么。
也许你可以解释什么_you_意思是“封装”?听起来你正在寻找“保护”或“隐藏”。 – 2013-03-18 20:23:39