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

C# 深度探索(三):值類型與參考類型的核心差異

     編輯:C# 入門

C# 型別系統的兩大支柱:值類型與參考類型

C# 的型別系統建立在兩大基石之上:值類型 與 參考類型。理解它們的差異,是掌握 C# 記憶體管理與程式行為的關鍵。

分類概覽

值類型參考類型
簡單類型類別
列舉介面
結構委派
陣列

核心差異:資料儲存方式

值類型 直接儲存資料內容;參考類型 則儲存指向物件的參考(記憶體位址)。

生活化比喻:別墅與地址

想像你在某地買了一棟豪華別墅(物件),但從未親自去過,只手握一張地址(參考)。當你想使用別墅時,將地址交給計程車司機(編譯器/執行環境),司機依照地址找到別墅。你手中的地址就是變數名稱,別墅本身是記憶體中的實際物件。

  • 值類型:像是你直接擁有別墅的鑰匙,每個變數都有自己獨立的資料副本。
  • 參考類型:像是多個人持有同一棟別墅的地址,透過不同變數操作同一個物件實例。

程式碼實證:值與參考的行為差異

using System;

class CValue {
    public int Value = 0;
}

class Test {
    static void Main() {
        // 值類型行為
        int val1 = 0;
        int val2 = val1;  // 複製值
        val2 = 123;       // 修改 val2 不影響 val1
        
        // 參考類型行為
        CValue ref1 = new CValue();
        CValue ref2 = ref1;  // 複製參考,指向同一物件
        ref2.Value = 123;    // 修改 ref2 影響 ref1
        
        Console.WriteLine("Values: {0}, {1}", val1, val2);  // 輸出: 0, 123
        Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value);  // 輸出: 123, 123
    }
}

關鍵觀察

  • 值類型:val1 與 val2 擁有獨立儲存空間,互不影響。
  • 參考類型:ref2 複製的是 ref1 的參考,兩者指向同一物件實例。透過任一變數修改物件屬性,另一變數讀取時都會看到變化。

重要啟示

參考類型的變數只是儲存物件位置的「地址」,而非物件本身。就像別墅被燒毀(物件內容改變),但地址(變數值)並未改變。這也解釋了為什麼在方法傳遞參考類型時,方法內部對物件的修改會影響外部原始物件。

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