志在指尖
用双手敲打未来

C#中关于值类型和引证类型的区别

一直以来关于值类型与引证类型之间的差异都不是特别清晰,直到踩了坑….
正好最新空闲,便想着整理整理这一两年来遇到的奇葩问题和解决方案,趁便就把它给拎出来记一下,免得以后再摔跤
值类型与引证类型的差异
今日为了阐明值类型与引证类型的典型差异,预备把结构体(值类型)和类(引证类型)拉出来溜溜C#
首要我们先界说一下
//////类///classTestClass{publicintId{get;set;}publicstringName{get;set;}
}//////结构体///structTestStruct
{publicintId{get;set;}publicstringName{get;set;}
}
然后咱看代码
classProgram{staticvoidMain(string[]args){//测验引证类型TestClassc1=newTestClass{Id=0,Name=”未界说”};
TestClassc2=c1;//c1给了c2c2.Id=1;c2.Name=”a”;
Console.WriteLine($”c1[{c1.Id},{c1.Name}]”);//测验值类型TestStructs1=newTestStruct{Id=0,Name=”未界说”};
TestStructs2=s1;//s1给了s2s2.Id=2;s2.Name=”b”;
Console.WriteLine($”s1[{s1.Id},{s1.Name}]”);
Console.ReadKey();
}
}
最终看成果
完毕
好了,成果显而易见。
c1和s1我一直没有动过它,s1(值类型)倒是乖乖的,但是c1(引证类型)却跟着c2变了,由此我们能够想到
值类型的每一次赋值都会执行一次逐字段的复制,引证类型的赋值仅仅指针的传递,其实也是生成新的指针实例。
也就是说,我们在c1和c2之间进行值传递的时候,传的其实仅仅内存地址而已。就像你有一张银行卡,你用它绑了支付宝又用它绑了微信,不管你用哪个app去买包子,花的都是你银行卡里的钱
最终,遇到这个坑别忘了跳一跳,摔到里边真的挺疼的

未经允许不得转载:IT技术网站 » C#中关于值类型和引证类型的区别
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载