.net의 이벤트 대리자에 대한 표준 패턴의 요점은 무엇입니까? 나는. EventHandler는 미리 정의 된 대리자입니까? 왜 요구 사항에 가장 적합한 서명을 선택하지 않는 것이 좋습니까?.net의 이벤트 서명 패턴
편집 : 또한 모든 경우에 마이크로 소프트의 예를 철저하게 따라야 할 필요가 있습니까?
.net의 이벤트 대리자에 대한 표준 패턴의 요점은 무엇입니까? 나는. EventHandler는 미리 정의 된 대리자입니까? 왜 요구 사항에 가장 적합한 서명을 선택하지 않는 것이 좋습니까?.net의 이벤트 서명 패턴
편집 : 또한 모든 경우에 마이크로 소프트의 예를 철저하게 따라야 할 필요가 있습니까?
그것은 언제나처럼 sender
paramater 항상하는 System.Object와 args
매개 변수를 사용하여 버전 관리의 일관성과 주로의 경우 System.EventArgs, 또는 이들의 dervied 클래스, 당신은 변화뿐만 아니라 전달 된 발신자 인수를 변경할 수 있습니다 EventArgs는 기존 코드를 손상시키지 않고 이후에 입력합니다.
전체 .NET 이벤트 관용구는 호출 코드가 이벤트가있는 구성 요소 개발자의 제어하에 있지 않은 구성 요소 기반 개발을 지원하도록 설계되었습니다.
발신자와 수신자를 분리합니다.
이것은 좋은 질문입니다. 이단이지만 좋은. 나는 최근에 블로그 게시물을 읽었는데 (나는 링크를 찾을 수 없다 - 누구든지 그 링크를 가지고있다) 좋은 이벤트 처리를 제공하기 위해 항상 System.EventArgs를 오버라이드해야한다는 신화를 폭로했다.
저는 규칙을 따르고 규칙을 따르기는하지만, 피할 수없는 경우에는 구부릴 수 있다고 주장 할 수 있습니다. 모든 이벤트에 대해 System.EventArgs를 계속 무시해야하는 경우 루틴 연결이 추가됩니다. 이제는 추적 할 또 다른 사항이 있습니다.
구성원을 제공하는 "e"가 더 이상 유용하지 않거나 잘 명명 된 인수 집합보다 직관적이지는 않습니다. 인수가 권장 System.EventArg 패턴을 파견하는 데 성공할 수 있다고는 생각하지 않지만 인수를하기 위해 인수해야합니다.
는 C#을 1.0에서
RP 협약은 감각을 많이하지 않았다. C# 2.0에서는 일정한 양의 대리자 분산이있는 경우 더 적합합니다.
매개 변수에 대해 실제로 신경 쓰지 않는 이벤트 처리 방법이있는 경우 (예 :
public void SaveDocument(object sender, EventArgs args)
{
// Save the document here
}
이제 실제 보낸 사람 또는 인수가 더 엄격하게 입력하는 경우에도 규칙을 다음 모든 이벤트에 가입하는 방법을 사용할 수 있습니다. 즉, 키보드 이벤트, 버튼 클릭 등에 대해 동일한 핸들러를 사용할 수 있습니다.