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

C# abstract 修飾詞完整解析:抽象類別、方法、屬性、事件與索引子

     編輯:關於C#

abstract 修飾詞用於宣告抽象成員,強制衍生類別提供具體實作。可套用於類別、方法、屬性、事件、索引子,但不可與 static、virtual 同時使用。本文透過完整範例展示各類抽象成員的定義與實作模式。

核心規則

  • 抽象類別不可實例化,僅能作為基類被繼承。
  • 含有任一抽象成員的類別必須標記為 abstract。
  • 衍生類別必須以 override 實作所有繼承的抽象成員(除非衍生類別本身也是抽象類別)。
  • 抽象成員宣告不包含實作主體(無大括號)。

完整範例:抽象基類與具體衍生類

using System;

namespace AbstractDemo
{
    // 抽象基類
    public abstract class BaseClass
    {
        // 抽象屬性:同時有 get/set 表示衍生類必須實作為可讀寫
        public abstract string Attribute { get; set; }

        // 抽象方法
        public abstract void Function(string value);

        // 抽象事件
        public abstract event EventHandler Event;

        // 抽象索引子:僅有 get 表示衍生類必須實作為唯讀
        public abstract char this[int index] { get; }
    }

    // 具體衍生類
    public class DeriveClass : BaseClass
    {
        private string attribute;

        // 實作抽象屬性
        public override string Attribute
        {
            get { return attribute; }
            set { attribute = value; }
        }

        // 實作抽象方法
        public override void Function(string value)
        {
            attribute = value;
            if (Event != null) Event(this, EventArgs.Empty); // 觸發事件
        }

        // 實作抽象事件
        public override event EventHandler Event;

        // 實作抽象索引子
        public override char this[int index]
        {
            get { return attribute[index]; }
        }
    }

    // 測試程式
    class Program
    {
        static void OnFunction(object sender, EventArgs e)
        {
            DeriveClass obj = (DeriveClass)sender;
            for (int i = 0; i < obj.Attribute.Length; i++)
                Console.WriteLine(obj[i]); // 使用索引子
        }

        static void Main()
        {
            DeriveClass obj = new DeriveClass();
            obj.Attribute = "1234567";
            Console.WriteLine(obj.Attribute); // 輸出 1234567

            obj.Event += new EventHandler(OnFunction);
            obj.Function("7654321"); // 觸發事件,輸出 7 6 5 4 3 2 1

            Console.ReadLine();
        }
    }
}

執行結果

1234567
7
6
5
4
3
2
1

各類抽象成員關鍵點

成員類型宣告語法衍生類實作重點
方法public abstract void Method(T param);以 override 提供方法主體
屬性public abstract T Prop { get; set; }若僅 get 則衍生類實作為唯讀;get; set; 則須雙向實作
事件public abstract event EventHandler Event;衍生類以 public override event EventHandler Event; 宣告
索引子public abstract T this[int i] { get; set; }同屬性,存取子決定讀寫權限

設計指導原則

  • 當多個衍生類共享「契約」但實作邏輯迥異時,使用抽象類別定義契約。
  • 抽象類別可包含非抽象成員(具體實作),提供預設行為供衍生類複用。
  • 介面(interface)亦可定義契約,但無法提供任何實作;抽象類別允許部分實作與狀態欄位。
  • 單一繼承限制下,若需多重契約組合,介面更適合。

善用 abstract 強制實作契約,配合 override 明確表達覆寫意圖,是建立可擴充、可維護類別階層的基石。

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