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

C# 繼承核心:多型與隱藏 (new/override) 實戰對比

     編輯:關於C語言

多型

基底類別 `virtual` + 衍生類別 `override`,執行期依實際型別分派:


class Parent { public virtual void Msg() => Console.WriteLine("Parent"); }
class Child1 : Parent { public override void Msg() => Console.WriteLine("Child_1"); }
class Child2 : Parent { public override void Msg() => Console.WriteLine("Child_2"); }

Parent o1 = new Child1();
Parent o2 = new Child2();
o1.Msg(); // Child_1
o2.Msg(); // Child_2

隱藏

衍生類別定義**相同簽名**非虛擬成員,遮蔽基底成員:


class Parent { public void Msg() => Console.WriteLine("Parent"); }

// 建議加 new 明確隱藏意圖 (否則編譯警告 CS0108)
class Child1 : Parent { new public void Msg() => Console.WriteLine("Child_1"); }

// 未加 new 也可用,但有警告
class Child2 : Parent { public void Msg() => Console.WriteLine("Child_2"); }

Parent o1 = new Child1(); o1.Msg(); // Parent (靜態繫結)
Parent o2 = new Child2(); o2.Msg(); // Parent
Child1 o3 = new Child1(); o3.Msg(); // Child_1
Child2 o4 = new Child2(); o4.Msg(); // Child_2

核心差異表

特性多型 (virtual/override)隱藏 (new)
基底成員必須 `virtual`/`abstract`任何非私有成員
衍生關鍵字`override``new` (建議)
繫結時機執行期 (動態)編譯期 (靜態)
基底參考呼叫執行衍生實作執行基底實作
設計意圖擴充/修改行為取代/遮蔽、版本相容

最佳實務

  1. 預設用 `virtual`/`override` 實現多型
  2. 只有在**必須**打破繼承鏈 (如第三方庫版本衝突) 才用 `new`
  3. 加 `new` 關鍵字消除警告,文件化隱藏意圖
  4. 避免同名隱藏造成困惑,考慮重新命名
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved