base.base.method() 호출
이 코드에는 SpecialDerived가 Derived에서 상속되는 클래스 계층 구조가 있습니다. Base에서 상속받습니다. 각 클래스에는 호출된 클래스를 나타내는 메시지를 인쇄하는 재정의된 Say() 메서드가 있습니다.
Main() 메서드에서 sd.Say()가 호출되면 다음과 같은 출력이 예상됩니다.
Called from Special Derived. Called from Derived. Called from Base.
그러나 실제 출력에는 Derived.Say()에 대한 예기치 않은 호출이 포함되어 있습니다.
이를 방지하려면 Say()를 재정의하는 대신 CustomSay() 메서드를 사용하는 SpecialDerived 클래스입니다. 이렇게 하면 sd.Say()가 호출될 때 CustomSay() 메서드만 호출됩니다.
class SpecialDerived : Derived { protected override void CustomSay() { Console.WriteLine("Called from Special Derived."); } }
별도의 답변에서 논의되는 또 다른 대안은 다음을 사용하여 Base의 Say() 메서드에 직접 액세스하는 것입니다. 반영:
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(); } }
이 접근 방식은 기술적으로 가능하지만 나쁜 습관으로 간주되므로 권장되지 않습니다.
위 내용은 `base.base.method()`를 호출하면 C# 상속에서 예기치 않은 결과가 발생하는 이유는 무엇이며 이를 방지할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!