出现问题的场景:我在写c#时候在构造器的参数选项里写了xxxx(string?name),提示错误。

只有值类型才可以加问号,引用类型本身就是可以为空,可以不加问号。

于是找了资料记录一下。

1、简单比较

  值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。

  值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。值类型变量声明后,不管是否已经赋值,编译器为其分配内存。

  引用类型(reference type):string 和 class统称为引用类型。当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间。当使用 new 创建一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈上分配的小片空间中。

  值类型的实例通常是在线程栈上分配的(静态分配),但是在某些情形下可以存储在堆中。引用类型的对象总是在进程堆中分配(动态分配)。

2、相同点

  • 引用类型可以实现接口,值类型当中的结构体也可以实现接口;
  • 引用类型和值类型都继承自System.Object类。

3、不同点

  1)范围方面

  • C#的值类型包括:结构体(数值类型、bool型、用户定义的结构体),枚举,可空类型。
  • C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。

  2)内存分配方面

  • 数组的元素不管是引用类型还是值类型,都存储在托管堆上。
  • 引用类型在栈中存储一个引用,其实际的存储位置位于托管堆。简称引用类型部署在托管推上。而值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实 例)存储;作为局部变量时,存储在栈上。(栈的内存是自动释放的,堆内存是.NET中会由GC来自动释放)

  3)适用场合

  值类型在内存管理方面具有更好的效率,并且不支持多态,适合用做存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。

  • 引用类型可以派生出新的类型,而值类型不能,因为所有的值类型都是密封(seal)的;
  • 引用类型可以包含null值,值类型不能(可空类型功能允许将 null 赋给值类型,如   int? a = null;  );
  • 引用类型变量的赋值只复制对对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值。

ABP学习笔记: C#值类型和引用类型相关推荐

  1. LV2之-----js 值类型和引用类型(基石1)

    一.学习目标 1.值类型和引用类型的基本概念 2.常见的值类型和引用类型都有哪些? 3.数据类型检测 4.值类型和引用类型在内存中的存储机制 5.创建对象的方式有哪些? 6.对象属性名的点表示法和方括 ...

  2. [读书笔记]C#学习笔记三: C#类型详解..

    前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...

  3. Windows Phone 开发起步之旅之二 C#中的值类型和引用类型

    今天和大家分享下本人也说不清楚的一个C#基础知识,我说不清楚,所以我才想把它总结一下,以帮助我自己理解这个知识上的盲点,顺便也和同我一样不是很清楚的人一起学习下.  一说起来C#中的数据类型有哪些,大 ...

  4. 三、值类型与引用类型

    说点别的 这是<关于 JavaScript 你必须要知道的 33 个概念 >系列的第三篇文章,今天稍微给大家介绍下这个系列. 如今前端的发展日新月异,很多人(包括我)都是追逐着一些流行的框 ...

  5. ext如何将值存入变量_变量类型之值类型与引用类型

    前言 变量类型在我们日常开发中经常接触到,但是js中的变量类型与其他强类型语言不同,由于js是弱类型语言,因此他的变量拷贝在我们实际的日常开发中有很多需要注意的项.而半斤在最近的开发中遇到了很多匪夷所 ...

  6. 再聊一次值类型和引用类型

    C#值类型,作为函数形参,形参被修改,不影响原值. 这是我们在初始学习编程时需要记住的内容,我们也是一直这样践行的. 先说结论:这是不准确的. 为什么提出这样看似很浅显的问题,是因为有次我在使用Arr ...

  7. java值类型和引用类型 == 比较,Java中值类型和引用类型的比较与问题解决

    一.问题描述 前几天因为一个需求出现了Bug.说高级点也挺高级,说白点也很简单.其实也就是一个很简单的Java基础入门时候的值类型和引用类型的区别.只是开发的时候由于自己的问题,导致小问题的出现.还好 ...

  8. C#类和接口、虚方法和抽象方法及值类型和引用类型的区别

    1.C#类和接口的区别 接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念! 而类是负责功能的具体实现! 在类中也有抽象类的定义,抽象类与接口的区别在于: 抽象类是一个不完全的类,类 ...

  9. C#基础知识1-深入理解值类型和引用类型

    C#值类型和引用类型这个概念在刚学习的时候应该就知道了.但是我们并没有深入的去理解它.越是基础知识其实才是最有用的.对代码的优化,代码质量的提升都有帮助.通过整理本文章,对很多知识也起到了巩固的作用吧 ...

最新文章

  1. 脚本1)启动jetty的脚本
  2. mysql创建新表失败_MySQL创建表失败的问题
  3. C#中委托的发展与匿名函数
  4. LeetCode题解——Longest Palindromic Substring
  5. 防雪崩利器:熔断器 Hystrix 的原理与使用
  6. Java实现BASE64编解码
  7. 微信公众号api关注接口php,1.1 公众号接口绑定
  8. c++图形中如何判断鼠标点击在一条直线上_中考数学常考题型精讲精练系列:函数图象上点的存在性问题中的距离与面积...
  9. 文艺平衡树 Splay 学习笔记(1)
  10. linux下检测硬盘,【转载】linux下硬盘监控诊断工具SmartTools
  11. 五大主流浏览器及内核
  12. Maven系列2--pom.xml 配置详解
  13. java两个数组中不同的数字_java将两个数组中不同的数字去掉一个剩下的保存到一个新的数组中...
  14. 3D打印机的操作细节
  15. ConceptDraw Office for mac(跨平台图表办公程序)
  16. sqlserver200864位下载_Microsoft SQL Server 2008 R2 官方简体中文正式版下载
  17. ubuntu 双网卡内外网优先级设置
  18. Android8.1 MTK平台 WLAN热点定制
  19. C++| 匠心之作 从0到1入门学编程【视频+课件+笔记+源码】
  20. java控制台实现的简易计算器,实现加减乘除

热门文章

  1. java项目-第73期基于ssm的汽车出租租赁系统
  2. 【信息系统项目管理师】项目管理者的最佳实践
  3. 线性表中有n个元素,每个元素是一个字符,现存于向量R[n]中,试写一算法,使R中字符按字母字符、数字字符和其他字符的顺序排列。要求利用原来的存储空间,元素移动次数最小。
  4. 单点登录SSO,统一认证oAuth名词解释
  5. zzuli 1981 赛前的准备--忙里偷闲 2/5
  6. Centos6.5安装oracle 11G
  7. 训练图像识别神经网络,神经网络训练结果分析
  8. 大数据技术——MapReduce词频统计
  9. 变形的生产者消费者问题PV解法
  10. 从学习C++到用C++做外挂