值类型和引用类型

C#把数据类型分为两种

  • 值类型
  • 引用类型

值类型和引用类型存储在内存的不同地方。

值类型存储在栈(stack)中,直接存储其值。

引用类型存储在托管堆(managed heap)上,存储对值的引用。

例如值类型:

1 // i和j的值会在内存的两个地方被存储
2 int i = 20;
3 int j = i;
4 // 修改 j
5 j = 21;
6 // 输出 i 和 j
7 Console.WriteLine($"i = {i}"); // 输出 i = 20
8 Console.WriteLine($"j = {j}"); // 输出 j = 21
9 // i没因j的修改而改变自身的值(依然等于20),验证了i和j被存储到了内存的两个地方.

例如引用类型

// 定义一个User类(类属于引用类型)
public class User
{
    public string Id { get; set; }
    public string Name { get; set; }
    public User(string id, string name)
    {
        Id = id;
        Name = name;
    }  
}
//使用: 创建一个用户
var user1 = new User("1", "张三");
// 再创建一个用户2直接赋值等于user1
var user2 = user1;
// 修改用户2的名字为李四
user2.Name = "李四";
//输出用户1和用户2的名字
Console.WriteLine($"user1.Name = {user1.Name}"); // 输出:user1.Name = 李四
Console.WriteLine($"user2.Name = {user2.Name}"); // 输出:user2.Name = 李四
// 会发现两个用户的名字都成了李四了
// 因为直接将user1赋值给了user2,但最终两个都是指向了内存的同一个引用,所以无论用户1和用户2的改变都是改变了同一个引用 所以改变的最终结果也是一样的!

  

posted @ 2020-04-12 18:07  VTing4You  阅读(119)  评论(0编辑  收藏  举报