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

C# 抽象屬性:強制衍生類別實作唯讀/讀寫屬性契約

     編輯:關於C語言

程式碼示範

using System;

abstract class Shape {
    // 唯讀抽象屬性:衍生類別必須實作 get
    public abstract int Area { get; }
}

class Rectangle : Shape {
    private int FWidth, FHeight;
    public Rectangle(int w, int h) { FWidth = w; FHeight = h; }

    public override int Area {
        get { return FWidth * FHeight; }
    }
}

class Program {
    static void Main() {
        Rectangle rect = new Rectangle(20, 10);
        Console.WriteLine(rect.Area); // 200
        Console.ReadKey();
    }
}

抽象屬性語法規則

  • 宣告於 abstract class 中,標記 abstract
  • 可指定 get、set 或兩者皆有,決定衍生類別必須實作的存取器
  • 衍生類別用 override 實作,不可加 virtual(除非再衍生)
  • 抽象屬性本身不包含邏輯,純粹定義契約

進階變體

讀寫抽象屬性

abstract class Entity {
    public abstract string Name { get; set; }
}

class User : Entity {
    private string _name;
    public override string Name {
        get => _name;
        set => _name = value?.Trim() ?? throw new ArgumentNullException();
    }
}

搭配介面使用

interface IMeasurable {
    double Area { get; }
}

abstract class Shape : IMeasurable {
    public abstract double Area { get; } // 同時滿足介面與抽象類別契約
}

實務應用場景

  1. 領域模型驗證:在 set 中集中驗證邏輯(如長度、格式、業務規則)。
  2. 計算屬性:Area、Perimeter 等衍生數值,唯讀抽象屬性強制各形狀自行實作演算法。
  3. 策略模式基礎:抽象屬性回傳策略物件,衍生類別決定具體策略。

注意事項

  • 抽象屬性不能有 private 存取修飾詞(預設 public)
  • 靜態屬性不能是抽象的
  • 介面中的屬性隱含抽象,不需加 abstract
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved