首页 > 代码库 > c#值类型与引用类型
c#值类型与引用类型
一.引用类型与值类型
值类型是个轻量级类型,引用类型是个 ‘重量级‘类型。值类型存放的是对象本身,而引用类型存放的对象存放的内存地址
1.内存分配
值类型 的实例一般在线程栈上分配, 引用类型的实例则在托管堆上分配。
注: 值类型的实例并不是一定在线程栈上,和定义的位置也有关系,局部变量和方法参数一定在栈上,但是类的成员变量总是会有类中的其他数据分配在一起,就有可能分配在堆上
C#同C/C++不同,c#是基于.net环境的,称之为托管。因为之前学的是C语言所以很不理解。
比如C语言中变量存放在 堆还是栈中并不是有变量类型来决定。 而是由定义变量的方式。栈中存放局部变量的值,系统进行内存分配回收。堆则是程序员创建,回收。
而在C#托管代码中变量存放内存的位置则不是根据定义变量的方式,他是由实例(C#中用变量类型有些欠妥,用对象实例比较精确点)类型决定的。
C/C++的 堆与栈区别
点击打开链接
点击打开链接
2. NET FRAMEWORK SDK 文档中已经指明了哪些是引用类型,哪些是值类型
值类型:值类型称为结构或枚举。struct ,Int32,Boolean,Decimal, 、这些结构都是从System.ValueType派生下来的。所有的枚举都是从System.Enum派生下来的
引用类型:类 都是引用类型
3.初始化
值类型变量创建的时候默认是个包含基础类型的值,所有成员被初始化为 0
引用类型变量创建的时候默认是null,表明没有指向一个有效的对象,如果直接使用,会抛出一个NullReferenceException的异常。
c#值类型与引用类型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。