2010-02-12 98 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

當你說「他們正在使用,如果你不希望調用的方法,而不是直接的自定義實現左的地方做」,你讓我覺得你可能無法完全理解上的差異簡單的委託和事件之間。這裏簡單的解釋,但這裏有一個簡單的解釋...

代表是一種讓代碼使用你的代碼來提供他們自己的方法的人的方式。因此,他們不會通過消息泵並同步發生等。

事件使用委託爲您提供一種方法,讓您將自己的代碼放入以響應事件。當有事情需要回應時,事件會通過消息泵進行處理,並且適用於其他地方可能發生的情況。但是,它們會發生在當前正在執行的代碼的執行路徑之外。令人高興的是,大多數人似乎都是通過直覺得到什麼時候使用其中的一種或其他。再一次,在這裏大大簡化,但希望有足夠的進一步閱讀。