我以为我理解C#中的事件。如果您不想直接调用方法而不是自定义实现的位置,有时会使用它们。但什么时候?
程序员A写A类,程序员B写B类.A类应该引发一个B类注册和反应的事件,但是A类对B类用于服务的函数一无所知。
你能给我一个简单的例子吗?
答案 0 :(得分:1)
这是非常基本的,可以说明问题。
http://msdn.microsoft.com/en-us/library/aa645739(VS.71).aspx
答案 1 :(得分:1)
public class A
{
private readonly B _B = new B();
public class A()
{
_B.MyEvent += MyEventHandler;
}
private void MyEventHandler(object sender, EventArgs e)
{
// Handle
}
}
public class B
{
public event EventHandler MyEvent;
// Call this when you raise the event so you don't
// need check if MyEvent is null.
private void OnMyEvent()
{
if (MyEvent != null) // If this is null we have no subscribers.
{
MyEvent(this, EventArgs.Empty);
}
}
}
答案 2 :(得分:0)
如果您说“如果您不想直接调用方法而不是自定义实现的位置”,那么当您说“它们被使用”时,您会认为您可能无法完全理解简单委托与事件之间的区别。这里过于简单化了,但这里有一个简短的解释......
代表是一种让使用您的代码编写代码的人提供自己的方法的方法。因此,它们不会通过消息泵并同步发生等。
事件使用委托为您提供一种方法,让您自己编写代码来响应事件。事件通过消息泵进行,适用于需要响应的内容,这可能会发生在其他地方。但是,它们将出现在当前正在执行的代码的执行路径之外。
令人高兴的是,大多数人似乎都习惯于何时本能地使用其中一种。再次,这里进行了大量的简化,但希望能够进一步阅读。