深入理解 C# 中的引用類型和值類型
C# 編程中,理解引用類型和值類型的區別至關重要。雖然兩者都存儲數據,但它們的行為和用法卻大相徑庭。
引用類型
C# 中的引用類型是非基本類型,例如接口、委託,甚至自定義類。它們持有對類型實例的引用,而不是實際的值本身。這意味著兩個相同引用類型的變量可以指向同一個底層對象。
值類型
另一方面,值類型,例如整數、布爾值和浮點數,直接存儲它們的值。當值類型變量賦值給另一個變量時,會創建一個完整的副本。對一個變量的更改不會影響另一個變量。
主要區別
下表總結了引用類型和值類型的主要區別:
特性 | 引用类型 | 值类型 |
---|---|---|
值 | 内存地址 | 实际数据 |
复制行为 | 仅复制引用 | 复制整个值 |
赋值 | 分配不同的地址 | 分配相同的值 |
标识 | 对象可以共享标识 | 对象具有唯一标识 |
空值 | 可以为空 | 不能为空(可空类型除外) |
實際示例
考慮以下代碼:
<code class="language-csharp">int number1 = 5; int number2 = number1; // 修改 number1 number1++; // number2 保持不变 Console.WriteLine(number2); // 输出:5</code>
在此示例中,number1 是值類型,因此其值的副本被賦值給 number2。修改 number1 不會影響 number2,因為它們是具有各自值的兩個獨立變量。
現在,讓我們來看一個引用類型的示例:
<code class="language-csharp">Person person1 = new Person(); person1.Name = "John"; Person person2 = person1; // 修改 person1 person1.Name = "Mary"; // person2 反映了更改 Console.WriteLine(person2.Name); // 输出:Mary</code>
在這種情況下,Person 是引用類型,因此 person1 和 person2 指向同一個對象。修改 person1 會更改底層對象,這會反映在 person1 和 person2 中。
以上是C#中的參考與價值類型:有什麼區別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!