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

繼承中屬性的特殊規則:重載、虛擬、抽象、密封屬性的完整語法與實戰模式

     編輯:關於C#

屬性繼承規則與方法高度一致,但有獨特的存取子(get/set)組合約束,掌握這些細節能避免編譯錯誤與執行期驚喜。

四大屬性修飾詞規則

類型關鍵字核心規則存取子約束
重載override名稱、型別、存取修飾詞一致基類單 get → 衍生可單/雙;基類雙 → 衍生可單/雙
虛擬virtual可被 overrideget/set 隱含 virtual
抽象abstract無實現,衍生必須 override存取子隱含 virtual,不可有實現
密封sealed override終止繼承鏈必須配合 override,存取子同樣 sealed

互斥規則

  • static、virtual、override、abstract、sealed 任兩個不可共用(abstract override 除外,表示重寫基類虛屬性並保持抽象)
  • 抽象屬性只能在抽象類別中宣告

實戰範例:客戶住宿系統擴展


// 抽象基類
public abstract class People {
    private string _name;
    public virtual string Name { get => _name; }  // 唯讀虛屬性

    private Sex _sex;
    public virtual Sex Sex { get => _sex; }       // 唯讀虛屬性

    protected string _idCard;
    public abstract string IdCard { get; set; }   // 抽象屬性:強制衍生類實現讀寫
}

// 具體衍生類
public class Customer : People {
    public string RoomNo { get; set; }
    public int StayDays { get; set; }

    public override string Name { get => base.Name; }  // 僅重載 get
    public override Sex Sex { get => base.Sex; }

    public override string IdCard {                   // 實現抽象屬性
        get => _idCard;
        set => _idCard = value;
    }
}

存取子視角理解

  • get ≈ T Get()(同屬性修飾詞、無參、回傳屬性型別)
  • set ≈ void Set(T value)(同屬性修飾詞、單 value 參數、void 回傳)
  • 重載屬性本質是為現有虛存取子提供新實現,非宣告新屬性

進階模式

  1. 唯讀 → 可寫:基類 virtual get,衍生 override get; set;
  2. 可寫 → 唯讀:基類 virtual get; set;,衍生 override get;(set 可拋 NotSupportedException 或空實現)
  3. 驗證攔截:衍生 set 加驗證後呼叫 base.set
  4. 計算屬性:衍生 override get => Compute(); 無 set

善用屬性繼承規則,能建構語義清晰、封裝嚴密、可演進的領域模型。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved