首页 > 代码库 > 结构是值类型,类是引用类型的理解
结构是值类型,类是引用类型的理解
首先咱放个代码,根据代码来理解
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~~~
垃圾菜鸡只能这样啦~~~
结构是值类型,类是引用类型的理解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。