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

C# 類別與介面、虛擬方法與抽象方法、值類型與參考類型 差異總覽

     編輯:關於C#

本文系統整理 C# 核心型別系統與多型機制的關鍵概念差異,適合面試複習、架構設計參考與教學大綱。

1. 類別 vs 介面

維度類別介面
目的實作與狀態封裝定義契約/行為規範
成員類型欄位、屬性、方法、事件、建構函式、運算子、索引子方法、屬性、事件、索引子 (C# 8+ 可有預設實作)
繼承單一繼承 (單一基類)多重實作 (可實作多個介面)
實例化可 `new` (非 abstract)不可直接實例化
存取修飾詞完整支援預設 `public`,C# 8+ 支援 `private`/`protected` 靜態成員

抽象類別 vs 介面

  • 抽象類別:`is-a` 關係、共享程式碼/狀態、可含建構函式、單一繼承。
  • 介面:`can-do` 契約、多型替換、無狀態、多重實作、C# 8+ 可含預設實作。
  • 選擇原則:優先介面;需共享程式碼/狀態或強制建構函式參數時考慮抽象類別。

2. 虛擬方法 vs 抽象方法

特性virtualabstract
實作本體有 (可提供預設行為)無 (僅宣告)
所屬類別一般/抽象類別只能在 abstract 類別
衍生類別義務可選擇 override必須 override (除非衍生類別也為 abstract)
呼叫基類`base.Method()` 可存取無基類實作
修飾詞組合`virtual`、`override`、`sealed override``abstract`、`override`、`sealed override`

關鍵差異

抽象方法 = 沒有實作本體的虛擬方法,強制衍生類別提供實作;虛擬方法提供預設實作,允許選擇性覆寫。

進階:abstract override

public class Base { public virtual void Work() { } }
public abstract class Middle : Base { public abstract override void Work(); } // 強制後續衍生類別重寫
public class Leaf : Middle { public override void Work() { } } // 必須實作

3. 值類型 vs 參考類型

特性值類型 (struct/enum/primitive)參考類型 (class/interface/delegate/array)
記憶體配置堆疊 (內嵌於父物件/區域變數)堆積 (物件)、堆疊存參考
指派語意複製實際數值複製參考 (指向同一物件)
預設值全零位元模式 (0, false, null 等)`null`
可為 null需包裝 `Nullable` (C# 2.0+)天生可為 null
繼承隱性繼承 ValueType,不可繼承其他類別,不可被繼承 (sealed)單一繼承 object,可繼承介面
效能無 GC 壓力、存取快、適合小型資料結構GC 管理、間接存取、適合複雜物件

結構 vs 類別

  • struct:值類型、堆疊、無建構函式限制 (需初始化所有欄位)、適合 < 16 bytes、不可變模式首選。
  • class:參考類型、堆積、支援完整繼承/多型、適合商務實體、服務、控制器。

4. 設計決策流程圖 (文字版)

需要定義契約嗎?
  ├─ 是 → 介面 (interface)
  │        ├─ 需共享程式碼/狀態? → 抽象類別 (abstract class) 實作介面
  │        └─ 否 → 直接實作介面
  └─ 否 → 需要實例化嗎?
           ├─ 否 → 抽象類別
           └─ 是 → 一般類別
                ├─ 需要多型? → virtual/abstract 方法
                ├─ 需要不可變小型資料? → struct (readonly struct)
                └─ 一般商務邏輯 → class

結語

理解這三組核心差異,是掌握 C# 型別系統、正確應用多型、設計可維護架構的基石。實務中:介面定義契約、抽象類別共享實作、虛擬方法提供擴展點、抽象方法強制實作、值類型承載資料、參考類型建模行為。

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