值类型与引用类型

Posted xt112233

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了值类型与引用类型相关的知识,希望对你有一定的参考价值。

先上代码

 1 class TestClass
 2 {
 3     public int val;
 4 }
 5 struct TestStruct
 6 {
 7     public int val;
 8 }
 9 
10 class Program
11 {
12     static void Main(string[] args)
13     {
14         TestClass testClass1 = new TestClass();
15         TestClass testClass2 = testClass1;
16         testClass1.val = 10;
17         testClass2.val = 20;
18 
19         TestStruct testStruct1 = new TestStruct();
20         TestStruct testStruct2 = testStruct1;
21         testStruct1.val = 30;
22         testStruct2.val = 40;
23 
24         WriteLine($"testClass1.val = {testClass1.val}");
25         WriteLine($"testClass2.val = {testClass2.val}");
26         WriteLine($"testStruct1.val = {testStruct1.val}");
27         WriteLine($"testStruct2.val = {testStruct2.val}");
28 
29         ReadKey();
30 
31     }
32 }

运行结果为

技术分享图片

出现这种情况是因为结构为值类型,类为引用类型

书里给出的解释是把对象赋给变量时,实际是把带有一个指针的变量赋给了该指针所指向的对象。

画一个我理解的图

技术分享图片

结构是值类型,并不包含指针,所以,只是单纯的把第一个结构的所有信息复制到第二个结构中

 

以上是关于值类型与引用类型的主要内容,如果未能解决你的问题,请参考以下文章

Struct和Class,值类型与引用类型(堆栈简单一提)

c# 值类型与引用类型 值传递与引用传递

C# 泛型是引用类型还是值类型,是根据啥判断?

值类型与引用类型

Swift 中的值类型与引用类型

值类型与引用类型