购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.4 引用类型和值类型的区别

引用类型和值类型的区别如下。

□ 值类型对象有两种表示:未装箱形式和装箱形式,而引用类型总是装箱形式。

□ 当定义自己的值类型时,应该重写Equals方法和GetHashCode方法。

□ 值类型中不可以有任何的抽象方法,不可以引入任何新的虚方法,所有的方法都隐含为sealed方法。

□ 当一个引用类型变量被创建时,它被初始化为null。值类型变量总是包含一个符合它的类型的值。

□ 当将一个值类型变量赋值给另一个值类型变量,会进行一个字段对字段的复制,而将一个引用类型变量赋值给另一个引用类型变量时,只会复制内存地址。

□ 两个或多个引用类型变量可以指向托管堆中的同一个对象,而每个值类型变量都有一份自己的对象数据副本。

□ 值类型实例在内存回收时不可能收到任何通知。

System.Runtime.InteropServices.StructLayout特性用于指示CLR是按指定的顺序来存储类型实例的字段,还是以任何CLR认为合适的顺序排列字段。C#编译器为引用类型选择的是LayoutKind.Auto方式,而为值类型选择的是LayoutKind.Sequential方式。

值类型和引用类型的区别如表3-2所示。

表3-2 值类型和引用类型区别表 LPUYpMUJcM+MewiRw87JHLDvLV3AW/C0Nju6qHxAEoMpmPDBGzzi7BQJ97zR3ec1

点击中间区域
呼出菜单
上一章
目录
下一章
×