2012-07-13 2 views
4

어떻게 구현할 수 있습니까? 여러 어셈블리에서 작동합니까? 그렇지 않다면 어떻게 작동시킬 수 있습니까?EventHandler와는 대조적으로 EventListener 란 무엇입니까?

+0

나는이 질문을 이해하지 못한다. AFAIK,'EventListener'는 추적과 함께 사용됩니다. (당신이 더 구체적인 세부 사항을 제공 할 때 나의 downvote를 되 찾을 것입니다) – leppie

답변

11

질문을 완전히 이해하지 못할 위험이 있으므로 다른 가능한 설명을 제공하고 싶습니다.

클래스에 대해 말하면 Java는 EventListener이고 .NET은 EventHandler입니다. 둘 다 같은 목적을 가지고 있습니다 : 이벤트 처리. 그러나 구현에는 차이가 있습니다. .NET의 이벤트 처리는 Java 이벤트 리스너보다 추상화 된 수준이라고 할 수 있습니다.

Java의 EventListener는 "모든 이벤트 수신기 인터페이스가 확장해야하는 태그 지정 인터페이스"(즉, MouseListener)입니다. .NET의 EventHandler는 이벤트를 처리하는 메서드에 대한 강력한 형식의 포인터 인 대리자입니다.

보다 광범위하게는 이벤트 수신기는 이벤트 처리를위한 인터페이스를 구현하는 개체이며 이벤트 처리기는 이벤트를 처리하는 메서드입니다. 일반적으로 이벤트 리스너는 Observer Design Pattern을 구현하고 이벤트 핸들러는 해당 패턴의 모든 배관을 숨 깁니다. 그러므로 event listener을 쓰는 것은 훨씬 더 복잡하고 event handler을 쓰는 것보다 더 구두가되는 경향이 있습니다.

더 나은 이해를 위해 Microsoft에서 Observer Design Pattern을 읽는 것이 좋습니다.

따라서 이벤트 핸들러를 구현하려면 처리 할 객체의 이벤트에 대리자를 지정하기 만하면됩니다. 나는. MyButton_Click이 방법

Button.Click += new EventHandler(MyButton_Click); 

는 이벤트 핸들러의 서명이 (당신의 클래스 또는 다른 곳에서 할 수있다) 실제로 이벤트 리스너에서와 같은을 달성하기 위해

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

즉, 이벤트를 처리

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 인터페이스를 구현하는 것을 포함하여 일반적인 관찰자 패턴입니다.하지만이 점을 입증해야합니다.

관련 문제