首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 呼叫基底類別的基底方法 — new 關鍵字隱藏與轉型技巧

     編輯:關於C語言

情境

衍生類別覆寫 (override) 方法時,若需呼叫「基底類別的基底類別」同名方法,無法直接使用 base.Method() (僅能呼叫直接基底)。

技巧:使用 new 隱藏 + 轉型


class A {
    public virtual void Func() { Console.WriteLine("A"); }
}
class B : A {
    public new void Func() { Console.WriteLine("B"); } // 隱藏 A.Func
}
class C : B {
    public void Func() {
        A a = (A)this; // 轉型為 A
        a.Func();      // 呼叫 A.Func
    }
}

原理解析

  • new 在 B 隱藏 A.Func,B.Func 為非虛擬 (除非另加 virtual)。
  • C 中將 this 轉型為 A,靜態型別為 A,編譯期綁定 A.Func。
  • 若 A.Func 為 virtual 且 C 未覆寫,執行期仍呼叫 A.Func (符合預期)。

更優雅的替代方案


class B : A {
    public override void Func() { 
        base.Func(); // 呼叫 A.Func
        Console.WriteLine("B"); 
    }
}
class C : B {
    public override void Func() {
        base.Func(); // 呼叫 B.Func (含 A.Func)
        Console.WriteLine("C");
    }
}
  • 正常繼承鏈使用 override + base.Method() 即可層層呼叫。
  • 僅在無法修改中間類別 (如第三方庫) 時考慮轉型技巧。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved