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

C# 介面、繼承與多型深度解析:靜態成員、基類擴展與虛擬方法重寫

     編輯:關於C語言

前言:從建構函式到物件生命週期管理

.NET Framework 提供建構函式初始化物件,並內建解構函式(Finalizer)在記憶體回收前釋放非受控資源。大多數情況下無需手寫解構函式,由垃圾收集器自動處理。

一、靜態成員與實例成員:類別層級 vs 物件層級

1. 核心差異

維度實例成員靜態成員
所屬特定物件實例類別本身
記憶體每個實例擁有獨立副本全程式僅一份,所有實例共享
存取方式instance.MemberClassName.Member(無需實例化)
典型案例物件狀態(Name, Age)工具方法(Console.WriteLine、Math.PI)

2. 靜態類別:純工具容器

  • 僅能包含靜態成員
  • 不可實例化(無建構函式)
  • 編譯器保證不會被誤用為實例型別
  • 範例:System.Math、System.Console

二、介面:契約導向設計的基石

1. 介面本質

  • 定義成員簽名集合(方法、屬性、事件、索引子)
  • 不包含任何實作細節
  • 不可直接實例化
  • 類別實作介面即承諾提供所有成員的具體實作

2. 關鍵特性

  • 一個類別可實作多個介面
  • 一個介面可被多個類別實作
  • 介面可繼承其他介面,形成介面層級
  • 支援顯式介面實作解決同名成員衝突

三、繼承:類別層級的關係與程式碼重用

1. 基本語法與術語

class Person { /* 基類/父類 */ }
class Student : Person { /* 衍生類/子類 */ }

子類自動擁有父類的所有非私有成員(欄位、屬性、方法)。

2. 完整繼承範例

class Person
{
    public string Name, Gender;
    public int Age;
    public double Weight;

    public Person() { /* 預設初始化 */ }
    public Person(string n, string g, int a, double w) { /* 參數初始化 */ }

    public void Eat(double food) => Weight += food;
}

class Student : Person
{
    public string SchoolName;
    public double Score;
    public int Grade;

    public Student() { SchoolName = "CSU"; Score = 99; Grade = 1; }

    public void Study(double hours) => Weight -= hours; // 專屬方法
}

// 使用展示
Person man = new Person("Lixiao", "woman", 11, 88);
man.Eat(12);

Student luxiaofeng = new Student();
Console.WriteLine($"{luxiaofeng.Name}, {luxiaofeng.SchoolName}"); // 繼承父類屬性
luxiaofeng.Eat(14); // 呼叫父類方法
luxiaofeng.Study(18); // 呼叫自身方法

繼承執行結果

3. C# 繼承規則總結

  1. 傳遞性:C 繼承 B,B 繼承 A → C 擁有 A、B 所有成員。object 為終極基類。
  2. 擴展性:子類可新增成員,不可移除繼承成員定義。
  3. 隱藏與覆寫:子類定義同名成員會隱藏父類成員(預設),若父類標記 virtual 且子類用 override 則為多型覆寫。
  4. 虛擬成員:virtual 方法/屬性/索引子允許子類覆寫,實現執行期多型。
  5. 單一繼承:類別只能繼承一個基類,透過介面實現多重繼承效果。

四、多型實戰:基類參考指向衍生類物件


class Worker : Person { /* ... */ }

Person student = new Student();
Person worker = new Worker();

student.Eat(10); // 呼叫 Person.Eat 或 Student 覆寫版本
worker.Eat(10);  // 同樣語法,實際執行取決於真實物件型別

這正是子型別多型的核心:統一介面,多種實作。

總結

靜態成員提供類別層級共享功能;介面定義行為契約解耦實作;繼承實現「是一種」關係與程式碼重用;虛擬方法配合覆寫構建執行期多型。三者結合構成 C# 面向對象架構的三大支柱。

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