2011-02-06 5 views
0

일부 클래스에서 C#으로 사용자 지정 이벤트를 만들고 클래스 자체를 포함하여 이벤트를 브로드 캐스트한다고 가정 해 봅니다. 이 경우 어떻게 상속을 만들 수 있습니까? 이벤트가 부모 클래스에서 부모 클래스로 보내지는 대신에 같은 자식 클래스에서 자식 클래스로 보내진 것처럼 할 수 있습니다. 어떻게하면 부모 컨텍스트에서 코드가 실행되는 동안 자식 컨텍스트를 유지할 수 있는지 결정할 수 있습니다 이 상속 때문에 물리적으로?C# 사용자 지정 이벤트, 상속 및 종료

+4

매우 모호하고 이해할 수없는 부분이 있습니다. 적용 사례가 표시되지 않습니다. 몇 가지 샘플 코드와 달성하려는 내용에 대한 자세한 설명을 제공하는 것이 좋습니다. – abelenky

+4

나는 그 질문을 이해하지 못한다. – Amy

+0

음 ... 질문은 무엇입니까 ... –

답변

2

파생 클래스에서 기본 클래스 이벤트를 발생시키는 방법을 묻는 중입니까?
이벤트 위임 필드가 이벤트 클래스를 정의하는 클래스 (이 경우에는 기본 클래스)에 대해 private이기 때문에 직접 할 수 없습니다. 그러나 기본 클래스에서 이벤트를 발생시키고 파생 클래스에서 호출하는 보호 된 메서드를 선언 할 수 있습니다. 하지만 난 그냥 생각 당신이 절대적으로 모금 메소드를 오버라이드 (override) 할 필요는 없습니다

class Base { 
    public event EventHandler Bang; 

    protected virtual void OnBang() 
    { 
     if (Bang != null) 
      Bang (this, EventArgs.Empty); 
    }  
} 

class Derived : Base { 
    public void DoSomething() 
    { 
     // let's bang for some fun 
     OnBang(); // will raise Bang 
    } 

    protected override void OnBang() 
    { 
     Console.WriteLine ("It's gonna bang now!"); 
     base.OnBang(); // if we remove this line, event will not be fired 
    } 
} 

참고 : 일반적으로 사용되는 표기는 방법 On[EventName]를 호출하고 이벤트 모금은 가상 그래서 파생 클래스가 가로 챌 수 있도록 (및 취소)을 제안한다 일반적인 방식으로 구독하는 것보다 자신의 이벤트에 반응하는 더 좋은 해결책입니다.

+0

파생 된 클래스의 기본 클래스에서 자동으로 발생 시키길 원했습니다. – user310291

+0

당신이 적어도 질문을 이해했기 때문에 나는 당신의 대답을 잘 체크했으나 나의 문제는 해결되지 않았기 때문에 그것을 클로저로 풀 수 있다고 생각합니다. – user310291

+0

무슨 소리 야? 이벤트는 자동으로 발생 될 수 없으며 어떤 경우에는 이벤트가 발생해야합니다. 기본 클래스에서 이벤트를 발생 시키려면 기본 클래스에서'OnBang'을 호출하면됩니다. –