专栏首页博客园c#值类型与引用类型区别

c#值类型与引用类型区别

  1. 值类型对象的两种表示方式:未装箱和已装箱,引用类型总是处于已装箱
  2. 值类型从System.ValueType派生。该类型提供了与System.Object相同方法,但System.ValueType重写了Equals方法, 能在两个对象的自断值完全匹配的前提下返回true。比外,System.ValueType重写了GetHashCode方法,生成哈希码时,这个重写方法所用的算法会将对象的实例字段中的值考虑在内。由于这个默认实现存在性能问题,所以定义自己的值类型时应重写EqualsGetHashCode方法,并提供它们的显式实现。
  3. 由于不能将值类型作为基类型来定义新的值类型或者新的引用类型,所以不应在值类型中引用任何新的虚方法。所以方法都不能是抽象的,所以方法都隐式密封(不可重写)。
  4. .由于不能将值类型作为基类型来定义新的值类型或者新的引用类型,所以不应在值类型中引用任何新的虚方法。所以方法都不能是抽象的,所以方法都隐式密封(不可重写)。.引用类型的变量包含堆中对象的地址。引用类型的变量创建时默认初始化为null,表明当前不指向有效对象。试图使用null引用类型变量会抛出NullReferenceException异常。相反,值类型的变量总是包含其基础类型的一个值,而且值类型的所有成员都初始化为0。值类型变量不是指针,访问值类型不可能抛出NullReferenceException异常。CLR确实允许为值类型添加“可空”(nullability)标志。
  5. 将值类型变量赋给另一个值类型变量,会执行逐字段的复制。将引用类型的变量赋给另一个引用类型的变量只复制内存地址。
  6. 基于上一条,两个或多个引用变量能引用堆中同一个对象,所以对一个变量执行的操作可能影响到另一个变量引用的对象。相反,值类型变量自成一体,对值类型变量执行的操作不可能影响另一个值类型变量
  7. 由于未装箱的值类型不在堆中分配,一旦定义了该类型的一个实例的方法不再活动,为它们分配的存储就会被释放,而不是等着进行垃圾回收。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis主从复制

         2.Slave同样可以接收其它Slaves的连接与同步请求,这样可以有效的分载Master的同步压力,因此我们可以将Redis的Replication...

    莫问今朝
  • .NET面试题解析(01)-值类型与引用类型

    3. delegate是引用类型还是值类型?enum、int[]和string呢?

    莫问今朝
  • .NET面试题解析(04)-类型、方法与继承

    6. 在继承中new和override相同点和区别?看下面的代码,有一个基类A,B1和B2都继承自A,并且使用不同的方式改变了父类方法Print()的行为。测试...

    莫问今朝
  • .NET基础拾遗(1)类型语法基础和内存管理基础

    在.NET中所有的内建类型都继承自System.Object类型。在C#中,不需要显示地定义类型继承自System.Object,编译器将自动地自动地为类型添...

    Edison Zhou
  • linux学习第二十四篇:管道符和作业控制,shell变量,环境变量配置文件

    vmstat 1 自动显示系统的状态 sleep 100 可以使系统沉睡100秒 管道符和作业控制 管道符的作用:把管道符前面执行的结果输出内容交给管道符后面...

    用户1215343
  • Java Review (十一、面向对象----多态)

    Java 引用变量有两个类型 :一个是编译时类型,一个是运行时类型,编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定,如果编译时类型...

    三分恶
  • Go 语言的基本数据类型

    0)变量声明 var 变量名字 类型 = 表达式 例: var num int = 10 复制代码 其中“类型”或“= 表达式”两个部分可以省略其中的一个。 1...

    李海彬
  • Java虚拟机--类加载过程

    SuperHeroes
  • 数据地图系列5——Stata版(上)

    今天要跟大家分享的是使用Stata语法制作数据地图! Stata语法制作数据地图,需要具备一点儿Stata语法基础,但是基于我们的目的是介绍地图的实现方式而非介...

    数据小磨坊
  • 用面部识别为鱼类建立医疗记录,追踪鱼类健康状况

    在科技发展飞速的今天,甚至连鱼也无法摆脱面部识别相机。数以百万计的大西洋鲑鱼可以将面孔储存在数字数据库中,以追踪他们的健康状况,并挑选哪些对海洋环境构成威胁。

    AiTechYun

扫码关注云+社区

领取腾讯云代金券