欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

值类型对象的两种表示形式

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

以上就是值类型对象的两种表示形式的详细内容,更多请关注其它相关文章!