值类型和引用类型的区别

值类型

包括byte,short,int,long,float,double,decimal,char,bool 和 struct ,枚举,可空类型。
值类型变量声明后,不管是否已经赋值,编译器为其分配内存;

引用类型

包括string 和 class,数组,接口,委托,object。
当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间。
当使用 new 创建一个类的实例时,分配堆上的内存空间,并把堆上空间的地址保存到栈上分配的小片空间中。

需要注意的是:引 用类型和值类型都继承自System.Object类。不同的是,几乎所有的引用类型都直接从System.Object继承,而值类型则继承其子类System.ValueType。System.ValueType直接派生于System.Object。即System.ValueType本身是一个类类型,而不是值类型。其关键在于ValueType重写了Equals()方法,从而对值类型按照实例的值来比较,而不是引用地址来比较。可以用Type.IsValueType属性来判断一个类型是否为值类型。

值类型和引用类型的区别总结:

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

  2. 不同点:
    1)范围
    C#的值类型包括:结构体(数值类型、bool型、用户自定义的结构体),枚举,可空类型。
    C#的引用类型包括:数组,用户自定义的类、接口、委托,object,字符串。
    2)内存分配:
    数组的元素不管是引用类型还是值类型,都存储在托管堆上。
    引用类型在栈中存储一个引用,其实际的存储位置位于托管堆。简称引用类型部署在托管推上。而值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实 例)存储;作为局部变量时,存储在栈上。(栈的内存是自动释放的,堆内存是.NET中会由GC来自动释放)

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

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

C#详解值类型和引用类型区别相关推荐

  1. C#的两种类据类型:值类型和引用类型

    目录 什么是值类型,什么是引用类型 概念: 值类型和引用类型区别 什么是值类型,什么是引用类型 概念: 值类型直接存储其值,而引用类型存储对其值的引用.部署:托管堆上部署了所有引用类型. 引用类型:基 ...

  2. C# 面向对象编程 (杂1)引用同解决方案下的其他项目,值类型和引用类型,字符串常用方法

    C# 面向对象编程 (杂1)引用同解决方案下的其他项目,值类型和引用类型,字符串常用方法 文章目录 C# 面向对象编程 (杂1)引用同解决方案下的其他项目,值类型和引用类型,字符串常用方法 1.命名空 ...

  3. 设计模式-值类型与引用类型、深拷贝与浅拷贝、原型模式详解

    一. 值类型和引用类型 1. 前言 (1). 分类 值类型包括:布尔类型.浮点类型(float.double.decimal.byte).字符类型(char).整型(int.long.short等). ...

  4. C# 值类型与引用类型的详解

    值类型与引用类型分这几种情况: 1.内存分为堆和栈,值类型的数据存储在栈中,引用类型的数据存储在堆中. 2.int numb=10,代码中的10是值类型的数据,numb只是一个指向10的变量而已.其中 ...

  5. 值类型与引用类型比较与区别

    在.NET中或许我们不用担心内存管理以及垃圾回收器(Garbage Collection GC)的问题,但是我们还是应该了解这些东东以便在必要的时候优化我们程序的性能.而且,如果对内存管理如何工作有所 ...

  6. 值类型与引用类型的区别

    可以这样理解: 值类型保存的是具体的值 引用类型保存的是值的地址 例如 int a = 1; int b = a; b++; 这时b为2,a仍然是1 再看引用类型,例如有个类型是 User User ...

  7. java引用类型和值类型_[Java教程]JavaScript中值类型和引用类型的区别

    [Java教程]JavaScript中值类型和引用类型的区别 0 2017-02-24 00:00:35 JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和 ...

  8. Golang的值类型和引用类型的范围、存储区域、区别

    常见的值类型和引用类型分别有哪些? 值类型:基本数据类型 int 系列, float 系列, bool, string .数组和结构体struct,使用这些类型的变量直接指向存在内存中的值,值类型的变 ...

  9. swift string转int_swift中结构体和类的区别(值类型和引用类型的区别)

    在swift中结构体和类有着更多的相同之处,在一般的使用中能够做到互相替换.我们可以先看看官方文档的描述: Unlike other programming languages, Swift does ...

最新文章

  1. 结对编程--------四则运算 实验总结2
  2. 网络编程学习笔记(readv和writev函数)
  3. 用asp.net画饼图
  4. Jersey注解详解
  5. 重磅!2020中国高校毕业生月薪排名:清华第1,24高校过万,你呢?
  6. 利用Navicat Premium将SQL Server数据库转为My SQL数据库(解决Mac无法打开SQL Server 脚本文件的方法)
  7. [转]Ubuntu terminator 无法打开解决方案
  8. 关于数字签名简要原理
  9. python PPT学习资料分享
  10. 11、ARM嵌入式系统:中断使能
  11. Window安装Netbeans9
  12. android 投屏 app 三星,‎App Store 上的“爱缤投屏-用于三星智能电视”
  13. linux安装ftp服务并测试访问
  14. 碳纤维复合材料加固钢筋混凝土的极化作用
  15. 最后一个问题得到解决
  16. 洛谷P1796 汤姆斯的天堂梦【DP-数字三角形模型】【橙】
  17. 类HD630的集显玩CS:GO之类的FPS游戏
  18. bootice添加黑苹果引导_NUC8 x 黑苹果抄作业续集,快速迁移 OpenCore + 升级 Big Sur...
  19. 微信支付重复回调,java微信支付回调问题
  20. LIN总线增强型校验_雷洪钧:汽车总线及车载网技术概述

热门文章

  1. 大学计算机入学教育心得1000,新学期入学教育心得体会1000字
  2. Unity+SenseAR教程 | 用手势发射爱心2:加入发射方向【源码】
  3. MicroShift - 一个超轻量级 OpenShift 环境
  4. 如何编写代码解决问题,初学者指南
  5. Visual Studio Code 1.44 发布
  6. 使用Git子模块和开发模式管理Python项目
  7. 使用SQL SSIS和BIML自动化Salesforce数据复制
  8. 从项目的 GitHub 星星数看2018年 JavaScript 生态圈
  9. centos 6.5上安装php7,centos 6.5 编译安装PHP7
  10. 文件夹内的文本行数_重温生物信息重要的文本处理命令(实例命令及解释)