订阅儿童班活动?

时间:2010-02-12 16:15:54

标签: c# events

我以为我理解C#中的事件。如果您不想直接调用方法而不是自定义实现的位置,有时会使用它们。但什么时候?

程序员A写A类,程序员B写B类.A类应该引发一个B类注册和反应的事件,但是A类对B类用于服务的函数一无所知。

你能给我一个简单的例子吗?

3 个答案:

答案 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)

如果您说“如果您不想直接调用方法而不是自定义实现的位置”,那么当您说“它们被使用”时,您会认为您可能无法完全理解简单委托与事件之间的区别。这里过于简单化了,但这里有一个简短的解释......

代表是一种让使用您的代码编写代码的人提供自己的方法的方法。因此,它们不会通过消息泵并同步发生等。

事件使用委托为您提供一种方法,让您自己编写代码来响应事件。事件通过消息泵进行,适用于需要响应的内容,这可能会发生在其他地方。但是,它们将出现在当前正在执行的代码的执行路径之外。

令人高兴的是,大多数人似乎都习惯于何时本能地使用其中一种。再次,这里进行了大量的简化,但希望能够进一步阅读。