值类型对象的两种表示形式
程序员文章站
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,由于未装箱的值类型不在堆上分配,一旦地定义了该类型的一个示例的方法不在活动,为他们分配的存储就会被释放,而不是等着进行垃圾回收
以上就是值类型对象的两种表示形式的详细内容,更多请关注其它相关文章!
上一篇: C# Md5Hash的用法及实例
下一篇: 关于脚本PowerShell的设计实例
推荐阅读
-
Java中成员变量与局部变量的区别、对象类型作为方法的参数和方法的返回值
-
将DataRow转成指定类型的类,并返回这个类的对象(带值)
-
变量在内存中的表示 及 各种类型的变量的默认初始值
-
将指定字符串中的一个或多个格式项替换为指定对象的字符串表示形式。
-
js实现输出数组对象中的最大值最小值的两种方法
-
后端接口同时接收POJO对象(json)和基本数据类型的情况下,前端如何传值
-
获得函数返回值类型、参数tuple、成员函数指针中的对象类型
-
Java中成员变量与局部变量的区别、对象类型作为方法的参数和方法的返回值
-
将DataRow转成指定类型的类,并返回这个类的对象(带值)
-
值传递和引用传递、对象类型与基本类型、实参与形参之间、栈堆之间的七七八八