C# 值类型和引用类型(上篇)

C# 数据类型分为两种 "非常重要"

  • 值类型
  • 引用类型

从概念上来看,其区别是值类型直接存储其值,而引用类型存储对值的引用。

这两种类型存储在内存的不同地方:

  • 值类型存储在 堆栈(stack)中
  • 而引用类型存储在托管堆(managed heap)上

注意区分某个类型的值类型还是引用类型,因为这会有不同的影响。

例如 int 是值类型, 这表示下面的语句会在内存的两个地方存储值20:

i = 20;
j = i;

我们来看看下面的代码, 这段代码假设已经定义了一个类 Cat , Cat是一个引用类型, 它有一个 string 类型的成员变量 Name:

Cat whiteCat, blackCat;

whiteCat = new Cat();

whiteCat.Name = "白猫";

blackCat = whiteCat;

Console.WriteLine(blackCat.Name);

blackCat.Name = "黑猫";

Console.WriteLine(whiteCat.Name);

 要理解的重要一点是在执行这段代码后, 只有一个 Cat对象。 whiteCat 和 blackCat 都指向包含该对象的内存位置。

因为 whiteCat 和 blackCat 是引用类型的变量, 声明这两个变量值保留一个引用 。如上所示。 因为 whiteCat 和 blackCat 引用

同一个对象,所以对 whiteCat的修改会影响 blackCat, 反之亦然。 因此上面的代码会显示 白猫 和 黑猫

如果变量是一个引用, 就可以把其值设置为 null, 表示它不引用任何对象: 

whiteCat = null;

如果将引用设置为null, 显然不能再对它调用任何非静态成员函数或字段了。

发布了27 篇原创文章 · 获赞 0 · 访问量 161

猜你喜欢

转载自blog.csdn.net/weixin_39328209/article/details/105509747