>백엔드 개발 >C++ >C# 파생 클래스에서 상속된 이벤트를 올바르게 발생시키는 방법은 무엇입니까?

C# 파생 클래스에서 상속된 이벤트를 올바르게 발생시키는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-25 16:03:10364검색

How to Correctly Raise Inherited Events in C# Derived Classes?

C에서 상속된 이벤트 발생

객체 지향 프로그래밍에서는 클래스가 기본 클래스에서 이벤트를 상속하는 것이 일반적입니다. 그러나 상속된 이벤트를 발생시키면 혼란이 발생할 수 있습니다. 이 질문은 파생 클래스에서 상속된 이벤트를 발생시키려고 할 때 발생하는 오류를 해결하고 이에 대한 솔루션을 제공합니다.

문제

다음과 같이 정의된 기본 클래스에서:

public class BaseClass
{
    public event EventHandler Loading;
    public event EventHandler Finished;
}

파생 클래스가 상속된 이벤트를 발생시키려고 합니다.

public class DerivedClass : BaseClass
{
    // Error: 'BaseClass.Loading' can only appear on the left hand side of += or -=
    this.Loading(this, new EventHandler());
}

이 오류는 이벤트에 액세스할 수 없음을 나타냅니다. "this" 키워드를 직접 사용합니다.

해결책

상속된 이벤트를 발생시키려면 기본 클래스에 보호된 메서드를 정의하여 이벤트 호출을 처리해야 합니다. 이러한 메서드를 사용하면 파생 클래스가 이벤트를 재정의하는 경우에도 이벤트가 발생할 수 있습니다.

public class BaseClass
{
    public event EventHandler Loading;
    public event EventHandler Finished;

    protected virtual void OnLoading(EventArgs e)
    {
        EventHandler handler = Loading;
        if (handler != null) handler(this, e);
    }

    protected virtual void OnFinished(EventArgs e)
    {
        EventHandler handler = Finished;
        if (handler != null) handler(this, e);
    }

    // Invoking the events from the derived class
    public class DerivedClass : BaseClass
    {
        public void RaiseLoadingEvent()
        {
            OnLoading(EventArgs.Empty);
        }

        public void RaiseFinishedEvent()
        {
            OnFinished(EventArgs.Empty);
        }
    }
}

파생 클래스에서 OnLoading 또는 OnFinished를 호출하면 기본 클래스의 이벤트를 구독하는 핸들러가 호출됩니다. , 파생 클래스에서 적절한 이벤트 처리를 보장합니다.

위 내용은 C# 파생 클래스에서 상속된 이벤트를 올바르게 발생시키는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.