结构是值类型,类是引用类型的理解
Posted battly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构是值类型,类是引用类型的理解相关的知识,希望对你有一定的参考价值。
首先咱放个代码,根据代码来理解
using System; namespace CSharp { public class MyClass { public int val; } struct Struct { public int val; } class Program { public static void Main(string[] args) { MyClass MyClass1=new MyClass(); MyClass MyClass2=MyClass1; MyClass1.val=10; MyClass2.val=20; Struct Struct1=new Struct(); Struct Struct2=Struct1; Struct1.val=30; Struct2.val=40; Console.WriteLine("{0}",MyClass1.val); Console.WriteLine("{0}",MyClass2.val); Console.WriteLine("{0}",Struct1.val); Console.WriteLine("{0}",Struct2.val); Console.ReadKey(true); } } }
然后咱们在来个运行结果:
嘿嘿,这样不就看出问题来了,(->_->)~~~~
来来,咱们来解释一下:
这个程序包含了一个结构类型Struct和一个类MyClass,两者都有一个int类型字段val。
在运行过程中两者都是执行了这样的操作:
1.声明类型的变量;
2.在这个类型的变量中创建该类型的新实例;
3.声明类型的第二个变量;
4.将第一个变量赋给第二个变量;
5.在第一个变量的实例中赋值val;
6.在第二个变量的实例中赋值val;
7.显示两个变量实例的val;
尽管对两个类型的变量执行了相同的操作,但结果显示是不同的,object类型的两个变量值是一样的,而结构类型的值却是不一样,为什么造成这样的结果呢?
对象是引用类型,在把对象赋给变量时,实际上是把带有一个指针的变量赋给了该指针所指向的对象,实际代码中,指针是对内存的一个地址,而地址是内存中该对象所在的位置,在用 MyClass MyClass2=MyClass1; 时,实际上是复制了这个地址,这样两个变量就包含了同一个对象的指针。
结构是值类型,其变量不是包含结构的指针,而是结构的本身,在用Struct Struct2=Struct1;时,实际上是把第一个结构的信息复制到第二个结构变量上。
好晕 晕 晕 晕 略略略~~~~
biubiubiu~~~
垃圾菜鸡只能这样啦~~~
以上是关于结构是值类型,类是引用类型的理解的主要内容,如果未能解决你的问题,请参考以下文章