C #에서 이벤트를 프로그래밍 할 때는 다음 과 같은 형식으로 대리자를 만드는 것이 좋습니다 .
delegate XEventHandler(object sender, XEventArgs e);
내 질문은 대리인의 첫 번째 주장에 object sender
있습니다. 항상 일반이어야 object
합니까? 발신자 유형이 있으면 object
항상 이와 비슷한 코드가 생성됩니다.
val = ((ConcreteType)sender).Property;
또는 훨씬 더 장황한
ConcreteType obj = sender as ConcreteType
if (obj != null) { ... }
강력한 형식의 보낸 사람에 대한 한 가지 주장은 다른 개체가 형식에 대해 걱정하지 않고 이벤트를 전달할 수 있다는 것 입니다. 이것은 GUI 환경에서 의미가 있지만 GUI 외부에서 이점이 있는지 확실하지 않습니다.
발신자의 클래스가 항상 (적어도 추상 클래스) 알려진 경우 어떻게해야합니까? 예를 들어, ListChanged
추상 List
클래스 에서 이벤트를 구현 하고 있고 다른 클래스 에서 이벤트 를 상속하려는 경우 (예 :) LinkedList
, ArrayList
발신자 유형으로 내 델리게이트를 정의해도 괜찮 List
습니까?
delegate ListChangedEventHander(List sender, ListChangedEventArgs e);
아니면 기존 방식 object sender
을 더 구체적인 유형 으로 변경하면 단점이 있습니까?