2010-06-21 4 views
1

가능한 중복 :
Difference between events and delegates and its respective applicationsC#을 - 대표 및 이벤트

안녕,

나는 내가 대표의 차이점이 무엇인지 알고 싶어 새로운 여기 가지입니다 & 이벤트 사용? 어느 것을 사용할 지 어떻게 선택할 수 있습니까?

감사합니다. MSDN 가입일

+0

(다른 유사한 스레드가 도움이되지 않으면 http://pobox.com/~skeet/csharp/events.html을 참조하십시오.) –

답변

0

:

이벤트 :

이벤트가 동작의 발생을 신호로 개체에 의해 전송 된 메시지이다

위임 :

델리게이트는 보유 할 수있는 방법

이벤트 처리와 관련하여 질문은 실제로 둘 중 하나를 사용할지 아니면 다른 것을 사용할지를 결정할 수 없습니다. 클래스는 어떤 액션이 발생할 때 실행되는 이벤트를 정의하고, 소비자는 이벤트의 델리게이트 정의와 일치하는 메소드를 할당합니다.

+0

(1)을 언급하지 않은 경우 거의 -1 할 것입니다. 그물, 사건 *은 막후의 반쯤 화려한 대표들, 또는 (2) 원래의 질문에 대한 대답이다. 그냥 MSDN을 인용해도 좋은 대답을하지 못합니다. – cHao

+0

대답은 그리 좋지 않을 수도 있지만, 나는 MSDN을 복제하는 것이 해결책이 아닐 것이라고 생각합니다. 이 문서와 같이 광범위한 질문에 대해서는 원래의 문서에 대한 참조가 기본 코드를 문맥 밖에서 인용하는 것보다 더 유용 할 수 있습니다. – marapet

+0

MSDN이 항상 초보자에게 도움이되는 것은 아닙니다. 그래서 다른 사이트에서 제공되는 사실과 해결책을 되풀이하는 커뮤니티가 있습니다. 답변과 함께 참고할 때 항상 도움이되는 IMHO입니다. – Benny

2

대리인은 C#의 이벤트에 사용됩니다. 대리자는 이벤트에서 호출 할 수있는 메서드의 서명입니다. 예 것이다 :

public delegate void MessageHandler(string message); 

것이라고 대리자를 사용하는 경우 :

NewMessage("Hello events"); 

상술 대리자를 사용하는 방법을 호출 할 것이다 :

public event MessageHandler NewMessage; 

이벤트를 호출 예 :

public void Client_NewMessage(string message) 
{ 
    MyTextBox.Text += message; 
} 

(대리자를 구현하는 현지 방법을 사용하여) 이벤트에 등록하려면, 이벤트를 노출하는 클래스를 작성하는 경우

Client cl = new Client(); 
cl.NewMessage += new MessageHandler(Client_NewMessage); 
9

, 이벤트 키워드를 사용 여부를 사이에 미묘한 차이가있다. 예를 들어 다음 코드는 유효하며 클라이언트가 ExposedAsEvent 또는 ExposedAsDelegate 중 하나에 가입 할 수 있습니다 :

public delegate void ExposedEventHandler(object sender, EventArgs e); 

public MyClass{ 
    public event ExposedEventHandler ExposedAsEvent; 

    public ExposedEventHandler ExposedAsDelegate; 

} 

유일한 차이점은 이벤트 수정을 사용하면 클라이언트가 위임하여 수행 할 수있는 제한이다. 이 경우 클라이언트는 대리자를 직접 호출하거나 null로 설정할 수 없습니다.

이벤트 접두어를 제거하면 이벤트와 비슷한 대리자를 계속 사용할 수 있지만 클라이언트가 '잘못'표시 할 수도 있습니다.

이벤트 수정자는 실제로 클래스의 클라이언트에 대한 의도를 명확히하고 액세스 (캡슐화)를 제한하는 방법 일뿐입니다.