C#.Net值类型和引用类型区别
C#.Net值类型和引用类型区别
在C#中
.Net中的数据类型是程序员需要认真掌握的基础知识。.NET 中类型的两个基本类别是“值类型”和“引用类型”。基元类型、枚举和结构为值类型。类、字符串、标准模块、接口、数组和委托为引用类型。 所有的类型要么是值类型,要么是引用类型,但有一种情况例外。根类型 System.Object ,它非常特殊,因为它既不是引用类型也不是值类型,而且不能实例化。因此,类型 Object 的变量可包含值类型或引用类型。 不过无论值类型还是引用类型,它们的声明方式都是一样的,当然它们的语义是不同的。 值类型直接存储在堆栈上,要么在数组中,要么在另一个类型中。值类型总是直接访问;不可能创建对值类型的引用。值类型的值不能为空引用,值类型的变量赋值会创建所赋的值的副本。 栈和堆 A.栈的特点是快速高效,缺点是有限制,数据不灵活;而堆的特点是灵活方便,数据适应面广泛,但是效率有一定降低。 B.栈的内存分配是自动释放,也就没有释放函数。堆空间的分配总是动态的,在.NET中会有GC来处理内存的释放。 除了接口是个例外,通用类型系统中的类型被分为两类:值类型和引用类型。引用类型的变量并不包含类型的实例,而只是包含对实例的引用。但在使用引用类型时会有一些性能上的问题,因此如果一个系统全部用引用类型,则这个系统的性能会大大减弱;因此.NET Framework 设计者保留了struct 数据类型(是值类型),而在 java 语言中就没有 struct 数据类型。 值类型: 包括基元类型、用户自定义结构或枚举类型 继承自System.ValueType类型 在堆栈上分配 通过拷贝赋值 默认通过值来传递参数,除非用ref关键字 引用类型: C#预定义的引用类型包括object和string类型,用户定义的引用类型可以是接口类型、类类型和委托类型 继承自System. Object类型 在托管堆上用“new”关键字分配 通过引用赋值 可能出现几个引用指向同一个对象,因此对一个变量的操作会影响另一个变量所引用的同一对象 用引用来传递变量 本文来源: 扫一扫加作者微信
参考文档:
Sql类型与.Net(C#)类型对应关系表(转) 将SQLServer数据类型转换为C#.Net类型 C#.Net 上传图片,限制图片大小,检查类型完整版 C#.Net String类型Null与String.Empty有什么区别? C#.Net 关键字ref和out的区别 C#.Net前台线程与后台线程的区别 C#.Net COM交操作性 - 强类型RCW和弱类型CCW详解 C#.NET DateTime时间格式转换为Unix时间戳格式(int类型) C# ADO.NET根据实体对象类型转换创建DataTable对象 C#判断对象类型为值类型、字符串、对象引用类型或泛型 C#.NET数据类型(Type)与DbType的对应关系 DbType与C#.NET数据类型(Type)对应关系 C#.NET 处理SQL特殊数据类型Geography/Geometry/Hierarchyid/XML C#.NET 查询MYSQL报错:值类型与列类型不匹配不能在列中存储<0001-01-01 00:00:00>。所需类型是MySqlDateTime vs编译ASP.NET提示失败1个,error CS0246: 未能找到类型或命名空间名“CSFrameworkV5”(是否缺少 using 指令或程序集引用?
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |