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

C# 版本控制(一):解決基底類別與衍生類別方法名稱衝突

     編輯:關於C語言

版本相容性兩大層級

  • 原始碼層級相容:依賴舊版本的程式碼重新編譯後可與新版本搭配。
  • 二進位層級相容:依賴舊版本的應用程式無需重新編譯即可與新版本搭配。

大多數語言難以達成二進位相容,C# 透過明確語法要求開發者表達意圖,從根本上解決版本衝突。

經典衝突情境

版本 1:基底類別無方法 F


// Author A
namespace A {
    public class Base { } // v1
}
// Author B
namespace B {
    class Derived : A.Base {
        public virtual void F() { Console.WriteLine("Derived.F"); }
    }
}

版本 2:基底類別新增虛擬方法 F


// Author A
namespace A {
    public class Base { // v2
        public virtual void F() { Console.WriteLine("Base.F"); }
    }
}

衝突分析

  • Derived.F 在編譯時 Base 尚無 F,故非覆寫。
  • 執行期載入 v2 Base 時,Derived.F 是否應視為覆寫?C# 預設不視為覆寫,保護既有行為。
  • 若開發者有意覆寫,必須加上 override 關鍵字;若無意,保持原狀或加上 new 明確隱藏。

C# 強制表達意圖的語法

最佳實踐

  1. 設計基底類別時,預留擴充點標記 virtual。
  2. 衍生類別覆寫時務必加 override。
  3. 非覆寫同名成員加 new,消除歧義與警告。
  4. 針對不應再被覆寫的虛擬方法,使用 sealed override 封鎖繼承鏈。

下一節將介紹 sealed、abstract 進階版本控制策略。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
關鍵字語意版本升級行為
(無標記)新方法,非覆寫基底新增同名虛擬方法時,不發生覆寫,發出警告 CS0114
new明確隱藏基底成員消除警告,語意清晰
override明確覆寫基底虛擬方法基底必須有對應 virtual,否則編譯錯誤