2008-10-29 2 views
5

.net의 이벤트 대리자에 대한 표준 패턴의 요점은 무엇입니까? 나는. EventHandler는 미리 정의 된 대리자입니까? 왜 요구 사항에 가장 적합한 서명을 선택하지 않는 것이 좋습니까?.net의 이벤트 서명 패턴

편집 : 또한 모든 경우에 마이크로 소프트의 예를 철저하게 따라야 할 필요가 있습니까?

답변

3

그것은 언제나처럼 sender paramater 항상하는 System.Object와 args 매개 변수를 사용하여 버전 관리의 일관성과 주로의 경우 System.EventArgs, 또는 이들의 dervied 클래스, 당신은 변화뿐만 아니라 전달 된 발신자 인수를 변경할 수 있습니다 EventArgs는 기존 코드를 손상시키지 않고 이후에 입력합니다.

전체 .NET 이벤트 관용구는 호출 코드가 이벤트가있는 구성 요소 개발자의 제어하에 있지 않은 구성 요소 기반 개발을 지원하도록 설계되었습니다.

2

발신자와 수신자를 분리합니다.

3

이것은 좋은 질문입니다. 이단이지만 좋은. 나는 최근에 블로그 게시물을 읽었는데 (나는 링크를 찾을 수 없다 - 누구든지 그 링크를 가지고있다) 좋은 이벤트 처리를 제공하기 위해 항상 System.EventArgs를 오버라이드해야한다는 신화를 폭로했다.

저는 규칙을 따르고 규칙을 따르기는하지만, 피할 수없는 경우에는 구부릴 수 있다고 주장 할 수 있습니다. 모든 이벤트에 대해 System.EventArgs를 계속 무시해야하는 경우 루틴 연결이 추가됩니다. 이제는 추적 할 또 다른 사항이 있습니다.

구성원을 제공하는 "e"가 더 이상 유용하지 않거나 잘 명명 된 인수 집합보다 직관적이지는 않습니다. 인수가 권장 System.EventArg 패턴을 파견하는 데 성공할 수 있다고는 생각하지 않지만 인수를하기 위해 인수해야합니다.

는 C#을 1.0에서

4

RP 협약은 감각을 많이하지 않았다. C# 2.0에서는 일정한 양의 대리자 분산이있는 경우 더 적합합니다.

매개 변수에 대해 실제로 신경 쓰지 않는 이벤트 처리 방법이있는 경우 (예 :

public void SaveDocument(object sender, EventArgs args) 
{ 
    // Save the document here 
} 

이제 실제 보낸 사람 또는 인수가 더 엄격하게 입력하는 경우에도 규칙을 다음 모든 이벤트에 가입하는 방법을 사용할 수 있습니다. 즉, 키보드 이벤트, 버튼 클릭 등에 대해 동일한 핸들러를 사용할 수 있습니다.

관련 문제