2011-07-28 5 views
0

기본 클래스와 파생 클래스가 있습니다. 기본 클래스에는 가상 보호 된 단추 클릭 메서드가있는 간단한 단추가 있습니다.오버 라이딩하는 메서드가 C#에서 한 번이 아닌 두 번 실행되는 이유는 무엇입니까?

그러나, 파생 클래스의 buttonclick 방법 내부의 코드는 대신 두 번 실행 나는 ovverride 키워드를 사용하고

(i는 파생 클래스에서 buttonclick 방법은 기본 클래스 buttonclick 메소드를 오버라이드 (override) 할 같은 새로운 사용되지 않음) 파생에서

this.ok.Click += new System.EventHandler(this.ok_Click); 
    protected virtual void ok_Click(object sender, EventArgs e) 
      { 
       MessageBox.Show("From the Base class"); 
      } 

: 여기

일단 기본 클래스에서 코드 예제

입니다 등급 :

this.ok.Click += new System.EventHandler(this.ok_Click); 
protected override void ok_Click(object sender, EventArgs e) 
      { 
       MessageBox.Show("From the Derived class"); 
      } 
+0

매우 불완전한 질문입니다. 좋은 코드는 어때요? 한 가지 가능한 실수는 메서드를 일부 이벤트 처리기에 두 번 구독하는 것입니다. – CodesInChaos

+0

메서드를 재정의 할 때 기존 onclick 이벤트를 제거한 다음 다시 첨부하십시오. –

+0

은 몇 가지 코드 예제를 제공 할 수 있습니까? – Tigran

답변

6

당신은 실제로 buttonclick 메소드를 호출 무슨 말했다하지 않은,하지만 난 그게 이벤트 핸들러 용의자 ... 그리고 난 당신이 모두 서브 클래스와 기본 클래스 생성자에에을 가입있어 의심 . 그렇게하지 마십시오. 한 번만 구독하면됩니다.

(해당하지 않는 경우 짧지 만 완전한 예를 표시하십시오.)

+0

예, 정확히 제 문제입니다. Jon을 정렬 해 주셔서 고마워요. –

+0

정말 대단 하시군요. 나는 이것을 스스로 발견했을 것입니다. – TheJonz

관련 문제