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

C# 進階核心(四):結構、部分類別與 Object 基類

     編輯:關於C#

一、結構——輕量級值型別

結構(struct)語法與類別幾乎相同,僅將 `class` 改為 `struct`。適用場景:小型資料結構、頻繁建立/銷毀、需值語意(如座標點、矩陣、日期時間)。

關鍵差異速查表

特性class(參考型別)struct(值型別)
儲存位置Managed HeapStack / Inline in containing type
指派行為參考複製值複製
繼承支援單一繼承不可繼承(隱性 sealed)
預設建構函式開發者可自訂無參建構式編譯器強制提供,不可自訂無參建構式
Null 能力可為 null不可為 null(除非用 Nullable<T>)
效能GC 壓力大、間接存取零 GC、記憶體局部性佳

使用建議

  • ✅ 原始型別語意(`Point`、`Vector`、`DateTime`、`decimal`)
  • ✅ 高頻建立、短生命週期、小於 16 Bytes
  • ❌ 需繼承、多型、大型物件、頻繁 boxing/unboxing 場景

二、部分類別——大型檔案與團隊協作利器

關鍵字 partial 允許將同一個類別、介面、結構拆分至多個原始檔。編譯時自動合併。

// File: Person.Core.cs
public partial class Person {
    public string Name { get; set; }
    public void SayHello() => Console.WriteLine($"Hi, {Name}");
}

// File: Person.Serialization.cs
public partial class Person {
    public string ToJson() => $"{{\"Name\":\"{Name}\"}}";
    public static Person FromJson(string json) { /* ... */ }
}

典型應用場景

  1. 程式碼產生器隔離: 設計工具產生的程式碼(如 `Form1.Designer.cs`)與手寫邏輯分離,重新產生不覆蓋業務碼。
  2. 團隊平行開發: 不同成員同時編輯不同部分,減少合併衝突。
  3. 條件式編譯: 不同平台/版本實作置於不同 partial 檔。

三、Object 類別——所有型別的共同祖先

所有 .NET 型別(含值型別經 boxing)隱含繼承 System.Object,直接獲得以下虛擬/非虛擬方法:

方法用途建議覆寫?
ToString()物件人類可讀表示✅ 強烈建議(除非極簡單型別)
Equals(object)值相等比較值型別 ✅ / 參考型別視語意
GetHashCode()雜湊碼(Dictionary/HashSet 鍵值)覆寫 Equals 時必覆寫
GetType()取得執行階段 Type 物件不可覆寫
MemberwiseClone()淺層複製protected,可內部使用
Finalize()解構子語法 `~Class()`僅非託管資源清理需實作

ToString() 覆寫範例

public struct Point3D {
    public int X, Y, Z;
    public override string ToString() => $"({X}, {Y}, {Z})";
}

// 使用
var p = new Point3D { X = 1, Y = 2, Z = 3 };
Console.WriteLine(p); // 輸出 (1, 2, 3)

掌握結構的值語意、部分類別的組織藝術、Object 的基礎契約,是邁向 C# 專家的關鍵里程碑。

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