2010-02-12 103 views
3

我以为我理解C#中的事件。如果您不想直接调用方法而不是自定义实现的剩余位置,有时会使用它们。但当?订阅儿童班的活动?

程序员A写入类A,程序员B写入类B.类A应该引发一个事件,即类B的寄存器并作出反应,但类A不知道类B用于提供的函数的任何内容。

您能否给我提供一个简单的例子?

回答

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);  
     } 
    } 
} 
0

当你说“他们正在使用,如果你不希望调用的方法,而不是直接的自定义实现左的地方做”,你让我觉得你可能无法完全理解上的差异简单的委托和事件之间。这里简单的解释,但这里有一个简单的解释...

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

事件使用委托为您提供一种方法,让您将自己的代码放入以响应事件。当有事情需要回应时,事件会通过消息泵进行处理,并且适用于其他地方可能发生的情况。但是,它们会发生在当前正在执行的代码的执行路径之外。令人高兴的是,大多数人似乎都是通过直觉得到什么时候使用其中的一种或其他。再一次,在这里大大简化,但希望有足够的进一步阅读。