가능한 중복 :
Difference between events and delegates and its respective applicationsC#을 - 대표 및 이벤트
안녕,
나는 내가 대표의 차이점이 무엇인지 알고 싶어 새로운 여기 가지입니다 & 이벤트 사용? 어느 것을 사용할 지 어떻게 선택할 수 있습니까?
감사합니다. MSDN 가입일
가능한 중복 :
Difference between events and delegates and its respective applicationsC#을 - 대표 및 이벤트
안녕,
나는 내가 대표의 차이점이 무엇인지 알고 싶어 새로운 여기 가지입니다 & 이벤트 사용? 어느 것을 사용할 지 어떻게 선택할 수 있습니까?
감사합니다. MSDN 가입일
:
이벤트 :
이벤트가 동작의 발생을 신호로 개체에 의해 전송 된 메시지이다
위임 :
델리게이트는 보유 할 수있는 방법
이벤트 처리와 관련하여 질문은 실제로 둘 중 하나를 사용할지 아니면 다른 것을 사용할지를 결정할 수 없습니다. 클래스는 어떤 액션이 발생할 때 실행되는 이벤트를 정의하고, 소비자는 이벤트의 델리게이트 정의와 일치하는 메소드를 할당합니다.
(1)을 언급하지 않은 경우 거의 -1 할 것입니다. 그물, 사건 *은 막후의 반쯤 화려한 대표들, 또는 (2) 원래의 질문에 대한 대답이다. 그냥 MSDN을 인용해도 좋은 대답을하지 못합니다. – cHao
대답은 그리 좋지 않을 수도 있지만, 나는 MSDN을 복제하는 것이 해결책이 아닐 것이라고 생각합니다. 이 문서와 같이 광범위한 질문에 대해서는 원래의 문서에 대한 참조가 기본 코드를 문맥 밖에서 인용하는 것보다 더 유용 할 수 있습니다. – marapet
MSDN이 항상 초보자에게 도움이되는 것은 아닙니다. 그래서 다른 사이트에서 제공되는 사실과 해결책을 되풀이하는 커뮤니티가 있습니다. 답변과 함께 참고할 때 항상 도움이되는 IMHO입니다. – Benny
대리인은 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);
, 이벤트 키워드를 사용 여부를 사이에 미묘한 차이가있다. 예를 들어 다음 코드는 유효하며 클라이언트가 ExposedAsEvent 또는 ExposedAsDelegate 중 하나에 가입 할 수 있습니다 :
public delegate void ExposedEventHandler(object sender, EventArgs e);
public MyClass{
public event ExposedEventHandler ExposedAsEvent;
public ExposedEventHandler ExposedAsDelegate;
}
유일한 차이점은 이벤트 수정을 사용하면 클라이언트가 위임하여 수행 할 수있는 제한이다. 이 경우 클라이언트는 대리자를 직접 호출하거나 null로 설정할 수 없습니다.
이벤트 접두어를 제거하면 이벤트와 비슷한 대리자를 계속 사용할 수 있지만 클라이언트가 '잘못'표시 할 수도 있습니다.
이벤트 수정자는 실제로 클래스의 클라이언트에 대한 의도를 명확히하고 액세스 (캡슐화)를 제한하는 방법 일뿐입니다.
(다른 유사한 스레드가 도움이되지 않으면 http://pobox.com/~skeet/csharp/events.html을 참조하십시오.) –