2012-07-13 77 views

回答

11

在不充分了解這個問題的風險,我想提供另一種可能的解釋。

談起類,Java有一個EventListener和.NET有一個EventHandler。兩者都有相同的目的:事件處理。但是在實施方面存在差異。可以這麼說,.NET的事件處理對於Java的事件監聽器來說是一個更高層次的抽象。

的Java的事件監聽是「標記接口所有事件偵聽器接口必須擴展」(即的MouseListener)。 .NET的EventHandler是一個委託,一個處理事件的方法的強類型指針。

更廣泛地說,事件偵聽器是同時的事件處理程序僅僅是處理事件的方法,它實現用於事件處理的接口的對象。一般來說,事件監聽器實現了一個Observer Design Pattern,事件處理程序隱藏了該模式的所有管道。因此編寫一個event listener涉及更多,並且傾向於比編寫event handler更爲口頭。

我會推薦閱讀Observer Design Pattern被微軟更好地瞭解它。

因此,實現事件處理程序,你只是一個委託分配到要處理的對象的事件。即

Button.Click += new EventHandler(MyButton_Click); 

其中MyButton_Click是一個方法(也可能是在你的班上或其他地方)具有事件處理程序的簽名和實際處理該事件,即

private void MyButton_Click(object sender, EventArgs e) 
{ 
    doSomething(); 
} 

爲了達到與事件偵聽器在同一Java中,你會寫這樣的事情(原諒我,如果我犯錯,因爲我從內存中寫它):

public class MyClass 
{ 
    Button myButton; 

    MyClass() 
    { 
     ... 
     myButton.addMouseListener(new ButtonHandler()); 
    } 

    public class ButtonHandler implements MouseListener 
    { 
     public void mousePressed(MouseEvent e) {} 
     public void mouseReleased(MouseEvent e) {} 
     public void mouseEntered(MouseEvent e) {} 
     public void mouseExited(MouseEvent e) {} 

     public void mouseClicked(MouseEvent e) 
     { 
      doSomething("Mouse clicked", e); 
     } 
    } 
} 

當然,也有實施日很多方面是常見的觀察者模式,包括在類本身,內部類,匿名類,適配器等中實現EventListener接口。但是這應該證明這一點。

相關問題