注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我只是一个人

我爱一个人

 
 
 

日志

 
 

值类型和引用类型的最基本的区别是什么?  

2011-04-18 22:14:55|  分类: 网页制作--技巧| |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
C#将类型分为两类,一类是值类型,另一类是引用类型。大部分固有的基本类型(如整型,浮点型)是值类型,结构类型也是值类型。引用类型包括类、接口、数组和字符串。基本的概念非常简单,那就是一个值类型的实例代表了实际的数据(存在栈中),而一个引用类型的实例代表指向数据的指针或者引用(存在堆中)。

装箱:值类型=>引用类型.

int i = 123;
object o = (object)i;

这个当中把i由int转换成为了object对象

拆箱:引用类型=>值类型

o = 123;
i = (int)o; 

让i由object转换为int对象


值类型和引用类型在实例化的时候是存储在不同的空间中的,值类型存储在Stack上,而引用类型是存储在Heap上,在装箱的过程中实际上是将在Stack上的值类型对象拷贝到Heap上,并以引用对象的存储格式保存,在这个过程中对所转换的引用类型对象进行修改操作,Stack上的值类型对象是不会变化的。而拆箱是将引用对象的值在拷贝回Stack上。

值类型:  
堆中直接存放“有效值”  
如:  
int a=3;  
则a在堆中就放的是3  

引用类型:  
在堆栈中存放的是另外一个对象(存放在堆中的)
的引用(地址)  
如:  
Form form1=new Form();  
就是说,在内存的堆栈中开辟了一个对象new Form(),form1在堆中存放的是那个对象的地址,并非对象本身

.NET将数据类型分为值类型(value type)和引用类型(reference type)

一个具有值类型(value type)的数据存放在栈内的一个变量中。即是在栈中分配内存空间,直接存储所包含的值,其值就代表数据本身。值类型的数据具有较快的存取速度。
一个具有引用类型(reference type)的数据并不驻留在栈中,而是存储于堆中。即是在堆中分配内存空间,不直接存储所包含的值,而是指向所要存储的值,其值代表的是所指向的地址。当访问一个具有引用类型的数据时,需要到栈中检查变量的内容,该变量引用堆中的一个实际数据。引用类型的数据比值类型的数据具有更大的存储规模和较低的访问速度。

值类型
(1)这个类型分配在哪里? 分配在栈上  
(2)变量是怎么表示的? 值类型变量是局部复制  
(3)基类型是什么? 必须继承自System.ValueType  
(4)这个类型能作为其他类型的基类吗? 不能。值类型是密封的,不能被继承  
(5)默认的参数传递是什么? 变量是按值传递的(也就是,一个变量的副本被传入被调用的函数)  
(6)这个类型能重写System.Object.Finalize()吗 不能。值类型不好放在堆上,因此不需要被终结。  
(7)我可以为这个类型定义构造函数吗? 是的,但是默认的构造函数被保留(也就是自定义构造函数必须全部带有参数)  
(8)这个类型的变量什么时候消亡? 当它们越出定义的作用域时  
引 用 类 型
(1)这个类型分配在哪里?   
分配在托管堆上
    
(2)变量是怎么表示的?   
引用类型变量指向被分配得实例所占的内存
    
(3)基类型是什么?   
可以继承自除了System.ValueType以外的任何类型,只要那个类型不是sealed的
    
(4)这个类型能作为其他类型的基类吗?   
是的。如果这个类型不是密封的,它可以作为其他类型的基类
    
(5)默认的参数传递是什么?   
变量是按引用传递(例如,变量的地址传入被调用的函数)
    
(6)这个类型能重写System.Object.Finalize()吗   
可以间接地重写

(7)我可以为这个类型定义构造函数吗?   
当然!
    
(8)这个类型的变量什么时候消亡?   
当托管堆被垃圾回收时。


  评论这张
 
阅读(317)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017