理解C#值类型和引用类型

工作许久了,可是对C#值类型和C#引用类型却一直无法很好的理解。这两天花了不少时间查找资料,看文章,终于有所收获,在此将自己理解整理出来,方便日后自己查看,同时希望对跟我有一样困惑的朋友有所帮助。废话不多说,下面开始说说怎么理解值类型和引用类型!

创新互联从2013年创立,公司以网站设计制作、成都网站设计、系统开发、网络推广、文化传媒、企业宣传、平面广告设计等为主要业务,适用行业近百种。服务企业客户上1000家,涉及国内多个省份客户。拥有多年网站建设开发经验。为企业提供专业的网站建设、创意设计、宣传推广等服务。 通过专业的设计、独特的风格,为不同客户提供各种风格的特色服务。

C#值类型数据直接在他自身分配到的内存中存储数据,而C#引用类型只是包含指向存储数据位置的指针。

那么有哪些类型是C#值类型的呢,我把他们归纳成三类:

基础数据类型(string类型除外):包括整型、浮点型、十进制型、布尔型。

整型包括:sbyte、byte、char、short、ushort、int、uint、long、ulong 这九种类型;

浮点型就包括 float 和 double 两种类型;

十进制型就是 decimal ;

布尔型就是 bool 型了。

结构类型:就是 struct 型

枚举类型:就是 enum 型

引用类型有五种:class、interface、delegate、object、string

上面说的是怎么区分哪些C#值类型和C#引用类型,而使用上也是有区别的。所有值类型的数据都无法为null的,声明后必须赋以初值;引用类型才允许为null。

 
 
 
  1.   int i = 0; 
  2.   //或者 
  3.   int i = new int(); 
  4.   //以上两种都是可以正确的且是等同的 
  5.   int i = null;//这样的语句是无法通过编译的,因为i是值类型的,是不允许为null的 
  6.   class c = null;//这样则是可以通过编译的,这里的c是引用类型的,允许为null 

值类型和引用类型在赋值(或者说复制)的时候也是有区别的。值类型数据在赋值的时候是直接复制值到新的对象中,而引用类型则只是复制对象的引用。例如:

 
 
 
  1.   public class abc 
  2.   { 
  3.   public int Attribute; 
  4.   public abc() 
  5.   { 
  6.   Attribute = 1; 
  7.   } 
  8.   } 
  9.   public static void Main() 
  10.   { 
  11.   int i = 0; 
  12.   int j = i; 
  13.   i = 1; 
  14.   Console.WriteLine("i={0}",i); 
  15.   Console.WriteLine("j={0}",j); 
  16.   //结果是: 
  17.   //i=1 
  18.   //j=0 
  19.   abc a1 = new abc(); 
  20.   abc a2 = a1; 
  21.   a1.Attribute = 2; 
  22.   Console.WriteLine("a1={0}",a1.Attribute); 
  23.   Console.WriteLine("a2={0}",a2.Attribute); 
  24.   //结果是: 
  25.   //a1=2 
  26.   //a1=2 
  27.   } 

这个例子就很好的说明了值类型和引用类型的不同了。

***还有值C#类型要么是分配在堆栈的,要么就是在结构中以内联方式分配的。C#引用类型是分配在堆的。C#引用类型和C#值类型都是从基类 Object 派生出来的。当C#值类型需要充当对象时,就在堆上分配一个包装(该包装能使值类型看上去像引用对象一样),并且将该值类型的值复制给它。该包装被加上标记,以便系统知道它包含一个值类型。这个进程称为装箱,反过来操作就称为拆箱。装箱和拆箱能够使任何类型像对象一样进行处理。

本文标题:理解C#值类型和引用类型
网页网址:http://www.hantingmc.com/qtweb/news41/408091.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联