深入理解 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中文网其他相关文章!