值类型与引用类型区别

2019-10-09 21:52 来源:未知
  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. 出于未装箱的值类型不在堆中分配,一旦定义了该品种的叁个实例的法子不再运动,为它们分配的蕴藏就能够被放出,实际不是等着开展垃圾回收。
TAG标签:
版权声明:本文由澳门国际银河备用网址发布于网络游戏新,转载请注明出处:值类型与引用类型区别