c#基础系列之值类型和引用类型的深入理解-创新互联
前言
目前成都创新互联已为上千家的企业提供了网站建设、域名、网站空间、绵阳服务器托管、企业网站设计、曲靖网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。不知不觉已经踏入坑已10余年之多,对于c#多多少少有一点自己的认识,写出来渴求同类抨击,对自己也算是个十年之痒的一个总结。
C#把数据类型分为值类型和引用类型
1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用。
1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上。存储位置的不同会有不同的影响。
下面话不多说了,来一起看看详细的介绍吧
基本概念
CLR支持两种类型:值类型和引用类型。 面试过很多5年左右的同学,有很多连值类型和引用类型的基本概念都回答不上来,难道现在的c#开发人员基础这么弱了吗?还是大家都不重视基础呢?这个随便找一篇博客都可以基础入门的。
引用类型
哪些类型是引用类型呢?其实一个可以称为”类“的类型都是引用类型。 引用类型总是从托管堆上分配的,常用的语法就是New XX(). C#的new 操作符会返回对象的指针 - 也就是指向对象数据的内存地址的一个引用。引用类型的传递其实传递的是对象的指针(string类型比较特殊),所以在特定的场景下性能是高于值类型的。一个引用类型在创建时默认为null,也就是说当前变量不指向一个有效的对象,也就是我们常遇到的异常“未将对象引用设置到对象的实例”。
值类型
因为引用类型变量都需要进行一次堆内存的分配,这会给GC造成很大的压力,所以CLR提供了轻量级类型“值类型”。 值类型一般在线程栈上分配。(注意:值类型可以嵌入一个引用对象中)一个值类型变量其实就包含了值类型实例的值,所以它没有引用类型的指针(大家猜想值类型需不需要类型对象指针呢?)
相同点和不同点
相同点
- 值类型和引用类型都是System.Object的子类
- 值类型和引用类型都可以继承接口。(很多人都认为值类型不能继承接口)
interface Itest { void test(); } struct TestStruct : Itest { public void test() { throw new NotImplementedException(); } }
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站栏目:c#基础系列之值类型和引用类型的深入理解-创新互联
标题URL:http://ybzwz.com/article/cssceo.html