> 백엔드 개발 > C++ > 파생 클래스에서 상속된 이벤트를 올바르게 호출하려면 어떻게 해야 합니까?

파생 클래스에서 상속된 이벤트를 올바르게 호출하려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-12-28 10:12:11
원래의
785명이 탐색했습니다.

How Do I Properly Invoke Inherited Events in Derived Classes?

상속 클래스의 사용자 정의 이벤트 호출

객체 지향 프로그래밍에서 상속을 사용하면 파생 클래스가 기본 클래스의 속성과 동작을 상속받을 수 있습니다. 그러나 상속된 멤버의 특정 측면에는 특별한 처리가 필요할 수 있습니다.

이 경우 특정 작업이 발생할 때 알림을 트리거하는 Loading 및 Finished라는 두 가지 이벤트가 있는 기본 클래스가 있습니다. 상속된 클래스에서 이러한 이벤트를 발생시키려고 하면 오류가 발생합니다.

이 오류가 발생하는 이유는 이벤트가 단순한 메서드가 아니기 때문입니다. 이는 구독된 이벤트 핸들러 목록을 캡슐화하는 대리자입니다. 상속된 클래스에서 컴파일러는 사용자가 이벤트 대리자를 직접 호출하는 대신 이벤트 대리자 자체에 액세스할 것으로 기대합니다.

이 문제를 해결하려면 이벤트 호출을 캡슐화하는 기본 클래스에 보호된 메서드를 만들어야 합니다. OnLoading 및 OnFinished라는 이름의 이 메서드는 이벤트 핸들러가 등록되었는지 확인하고 적절하게 호출합니다.

그런 다음 상속된 클래스에서 이러한 보호된 메서드를 호출하여 이벤트를 발생시킬 수 있습니다. 이를 통해 이벤트 알림이 구독된 모든 핸들러에 올바르게 전파되도록 보장합니다. 예는 다음과 같습니다.

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

    protected virtual void OnLoading(EventArgs e)
    {
        Loading?.Invoke(this, e);
    }

    protected virtual void OnFinished(EventArgs e)
    {
        Finished?.Invoke(this, e);
    }
}

// Derived class
public class DerivedClass : BaseClass
{
    public void DoSomething()
    {
        ...
        OnLoading(EventArgs.Empty);
        ...
        OnFinished(EventArgs.Empty);
    }
}
로그인 후 복사

이 접근 방식을 따르면 파생 클래스에서 상속된 이벤트를 성공적으로 발생시키고 구독한 이벤트 핸들러에 적절하게 알림을 보낼 수 있습니다.

위 내용은 파생 클래스에서 상속된 이벤트를 올바르게 호출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿