2009-04-15 3 views
0


파생 클래스가 대리자를 연결하지 않고 이벤트를 처리해야하는 이유는 무엇입니까?

Q1 :

"또한 ListControl.OnSelectedIndexChanged 방법 유도 허용 클래스 대리자를 연결하지 않고도 이벤트를 처리한다. 이는 파생 클래스에서 이벤트를 처리하는 기본 방법입니다. "


A) 나는 위의 견적을 이해한다면, 우리는 ListControl에서 클래스를 파생하는 경우, 우리는해야 대신의 SelectedIndexChanged 이벤트에 가입의

protected override void OnSelectedIndexChanged(
EventArgs e 
{ 
    //event handling logic 
} 

이 이유 OnSelectedIndexChanged = "name_of_event_handler"통해 (.ASPX 내부) 이벤트 구독보다 나을 : 이벤트 핸들러로서 OnSelectedIndexChanged() 메소드를 처리하고, 따라서 내부에 이벤트 처리 로직을 넣어?


B)는 어쨌든, ASCX 파일에 우리는 이벤트에 이벤트 핸들러를 연결 OnSelectedIndexChanged 속성을 사용합니다. 이 속성의 이름은 OnSelectedIndexChanged() 메소드의 이름과 같습니다. 왜 그런가요? 왜 대신이 속성의 이름의 SelectedIndexChanged되지 않습니다

Afterall는
<asp:ListControl SelectedIndexChanged = ”name_of_event_handler” 

, 속성이 방법에 이벤트를 의미하지 (OnSelectedIndexChanged는())이 이벤트는 호출하는!


고맙습니다


편집 :

안녕하세요,

그러나 base.On [EventName을] 또는 전화 있는지 확인 이벤트 원 ' 불!

다른 사람이이 이벤트에 응답 할 수 없도록하려는 경우 base.On [EventName]을 호출하지 않는 것이 좋습니다. 실제로 전화를 걸지 않는 것이 좋을 것입니다. 이벤트를 발생시키지 않고 해를 끼치십시오 (따라서 이벤트 핸들러는 호출되지 않습니다)?

Framework에서 작업을 수행하기 위해 해고해야하는 이벤트가 있지만 기본 사항을 호출하지 않는 것은 무엇인지 알고 있습니다. [SelectedIndexChanged]입니까?

답변

1

일반적으로 On [EventName] 함수를 재정의하여 내 논리가 모든 구독자의 논리 앞이나 뒤에 발생하는지 제어 할 수 있습니다.

그러나 기본 이름을 호출해야합니다. [EventName]에서 이벤트가 실행되지 않습니다.

4

는 점에서 "더 나은"입니다 :

가 사용하는 저렴
  • virtual (상속) 가능한 경우 - 그것은 몇 가지 추가 객체에 대한 필요성 (위임 인스턴스 등)
  • 이 허용 제거 시퀀스에서 어디서 오는 지 알 수있는 우선 순위 코드 - 즉 여러 호출자가 듣는 경우, 먼저 호출합니까? 둘째? 중간에?

첫번째 포인트는 특히 희박한 이벤트 핸들러가 컨트롤 같은 것들에 틀림 효율성보다 중요하다 (즉 대신 계자 같은 이벤트의 EventHandlerList 같은 것).

저는 두 번째 질문을 이해하지 못합니다. 추측 컨벤션입니다.

관련 문제