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

C# 基類 Object 與存取修飾符完整指南

     編輯:關於C#

所有 C# 類別隱含繼承 System.Object,擁有其核心方法。存取修飾符控制成員可見性,是封裝的語法基石。本文系統解析 Object 核心方法、五大存取修飾符語意,以及值型別與參考型別的記憶體行為差異。

一、System.Object 核心方法

方法簽名說明常用場景
ToString()virtual string ToString()物件文字表現日誌、除錯、UI 顯示,建議覆寫
GetHashCode()virtual int GetHashCode()雜湊碼字典鍵、HashSet,需與 Equals 一致
Equals()virtual bool Equals(obj)
static bool Equals(a,b)
值相等比較值型別預設逐位比較,參考型別比較參考,建議覆寫
ReferenceEquals()static bool ReferenceEquals(a,b)參考相等比較確認是否同一實例,不可覆寫
GetType()Type GetType()取得執行時類型反射、序列化、多型判斷
Finalize()protected virtual void Finalize()終結器非託管資源釋放,建議實作 IDisposable 模式
MemberwiseClone()protected object MemberwiseClone()淺層複製原型模式,值型別複製、參考型別共享引用

ToString 範例

double pi = Math.PI;
string s = pi.ToString();
Console.WriteLine($"pi={pi}, ToString()={s}"); // 字串表現

GetHashCode 範例

string a = "ludei", b = "ludei", c = a;
Console.WriteLine(a.GetHashCode()); // 相同內容相同雜湊
Console.WriteLine(b.GetHashCode());
Console.WriteLine(c.GetHashCode()); // 同一參考相同雜湊

Equals vs ReferenceEquals

object o1 = new object();
object o2 = o1;
object o3 = new object();

Console.WriteLine(Object.Equals(o1, o2));        // True (同參考)
Console.WriteLine(Object.ReferenceEquals(o1, o2)); // True
Console.WriteLine(Object.Equals(o1, o3));        // False (不同實例)
Console.WriteLine(Object.ReferenceEquals(o1, o3)); // False

二、五大存取修飾符語意

修飾符可見範圍直觀含義
public無限制完全公開
protected本類別 + 衍生類別繼承體系內可見
internal同一組件組件內部公開
protected internal同一組件 OR 衍生類別組件內 + 衍生類別(邏輯 OR)
private僅本類別/結構完全封裝(預設)
private protected同一組件 AND 衍生類別組件內衍生類別(邏輯 AND,C# 7.2+)

預設規則:類別成員預設 private;頂層類別預設 internal;介面成員隱含 public。

三、值型別 vs 參考型別 記憶體行為

特性值型別 (struct, enum, 基本型別)參考型別 (class, delegate, array, interface)
儲存位置堆疊 (區域變數) / 內嵌於物件堆積 (物件),變數存參考
指派行為複製值 (獨立副本)複製參考 (共享物件)
null 值不可為 null (除非 Nullable<T>)可為 null
預設值全 0 位元模式null
傳遞參數傳值 (複製)傳參考 (複製參考)
範例int, double, DateTime, Guidstring, List, 自訂類別

行為示範

// 值型別
int v1 = 10; int v2 = v1; v2 = 20;
Console.WriteLine(v1); // 10 (獨立)

// 參考型別
StringBuilder r1 = new StringBuilder("A");
StringBuilder r2 = r1; r2.Append("B");
Console.WriteLine(r1); // "AB" (共享同一物件)

string s1 = "Hello"; string s2 = s1; // 參考型別但不可變
s2 = "World"; 
Console.WriteLine(s1); // "Hello" (字串重新指派不影響原物件)

四、實務建議

  1. 覆寫 Equals/GetHashCode/ToString 組合,確保集合正確運作
  2. 實作 IDisposable + 終結器模式管理非託管資源
  3. 成員預設 private,按需最小化可見範圍
  4. 理解值/參考型別指派語意,避免非預期共享狀態
  5. 結構體設計應為不可變,避免傳值副作用混淆

Object 方法與存取修飾符是 C# 類別設計的語法基石,深度理解其語意與記憶體模型,能寫出正確、高效、安全的物件導向代碼。

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