> 백엔드 개발 > C++ > 재정의된 파생 클래스에서 기본 클래스 메서드를 어떻게 호출할 수 있나요?

재정의된 파생 클래스에서 기본 클래스 메서드를 어떻게 호출할 수 있나요?

Barbara Streisand
풀어 주다: 2024-12-30 06:07:12
원래의
1003명이 탐색했습니다.

How Can I Call a Base Class Method From a Derived Class That Has Overridden It?

base.base.method()를 예외적으로 호출

기본 구조에서 클래스를 파생할 때 base 키워드 직계 상위 클래스에 정의된 멤버에 대한 액세스를 허용합니다. 그러나 예외적인 상황에서는 상속 계층 구조의 상위 클래스에서 메서드를 호출해야 할 수도 있습니다.

제공된 코드 시나리오를 고려하세요. 여기서 DerivedSay()를 재정의합니다. 베이스 방식입니다. SpecialDerived 내에서 Say()의 후속 재정의는 base.Say()를 호출하여 Say()에서 실행하려고 합니다. >기본.

예상 vs. 실제 동작

예상되는 출력은 다음과 같습니다.

Called from Special Derived.
Called from Base.
로그인 후 복사

그러나 메서드 재정의의 특성으로 인해 실제 출력에는 Say()에서 파생:

Called from Special Derived.
Called from Derived.
Called from Base.
로그인 후 복사

문제 해결

base.base.method()을 직접 호출한 이후 지원되지 않으므로 대체 접근 방식이 필요합니다. SpecialDerived에서 제공되는 업데이트된 구현은 다음을 보여줍니다.

class SpecialDerived : Derived
{
    public override void Say()
    {
        Console.WriteLine("Called from Special Derived.");
        CustomSay(); // Calls CustomSay() from Derived instead of Say()
        base.Say();
    }

    protected virtual void CustomSay()
    {
        Console.WriteLine("Called from Derived.");
    }
}
로그인 후 복사
추가로 보호되는 가상 메서드를 정의하면

CustomSay(), Derived가 가능합니다. 다른 파생 항목에 영향을 주지 않고 원하는 동작을 처리합니다.

대체 반사 접근 방식

상속 구조를 수정할 수 없는 시나리오에서는 아래와 같이 반사 기반 접근 방식을 사용할 수 있습니다.

class SpecialDerived : Derived
{
    public override void Say()
    {
        Console.WriteLine("Called from Special Derived.");
        var ptr = typeof(Base).GetMethod("Say").MethodHandle.GetFunctionPointer();            
        var baseSay = (Action)Activator.CreateInstance(typeof(Action), this, ptr);
        baseSay();            
    }
}
로그인 후 복사
이 접근 방식은 리플렉션을 활용하여

Say() 메서드를 동적으로 검색합니다. 기본하고 표준 메서드 해결 프로세스를 우회하여 직접 실행합니다.

위 내용은 재정의된 파생 클래스에서 기본 클래스 메서드를 어떻게 호출할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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