EffectiveC#6--区别值类型数据和引用类型数据
2015-10-08 21:43
295 查看
1. 设计一个类型时,选择struct或者class是件简单的小事情,但是,一但你的类型发生了改变,
对所有使用了该类型的用户进行更新却要付出(比设计时)多得多的工作.
2.值类型:无多态但性能佳。
值类型(结构)存储数据,而引用类型(类)表现行为或职责。
3.
如果MyType是值类型,那么你只做了一次堆内存分配。大小正好是MyType大小的2倍.
MyType是引用类型,那么就做了三次堆内存分配:一次是为C对象,占4字节(假设你用的是32位的指针),另2次是为包含在C对象内的MyType对象分配堆内存
如果MyType是一个值类型数据,一次就分配出100个MyType的空间。
如果MyType是引用类型,就只有一次内存分配。每一个数据元素都是null。当你初始化数组里的每一个元素时,你要上演101次分配工作且这101次内存分配比1次分配占用更多的时间。分配大量的引用类型数据会使堆内存出现碎片,从而降低程序性能。如果你创建的类型意图存储数据的值,那么值类型是你要选择的。
4.如果你对下面所有问题回答YES,你应该创建值类型数据
1、类型的最基本的职责是存储数据吗?
2、它的属性上有定义完整的公共接口来访问或者修改数据成员吗?
3、我对类型决不会有子类自信吗?
4、我对类型决不会有多太性自信吗?
对所有使用了该类型的用户进行更新却要付出(比设计时)多得多的工作.
2.值类型:无多态但性能佳。
值类型(结构)存储数据,而引用类型(类)表现行为或职责。
3.
public class C { private MyType _a = new MyType( ); private MyType _b = new MyType( ); // Remaining implementation removed. } C var = new C();
如果MyType是值类型,那么你只做了一次堆内存分配。大小正好是MyType大小的2倍.
MyType是引用类型,那么就做了三次堆内存分配:一次是为C对象,占4字节(假设你用的是32位的指针),另2次是为包含在C对象内的MyType对象分配堆内存
MyType [] var = new MyType[ 100 ];
如果MyType是一个值类型数据,一次就分配出100个MyType的空间。
如果MyType是引用类型,就只有一次内存分配。每一个数据元素都是null。当你初始化数组里的每一个元素时,你要上演101次分配工作且这101次内存分配比1次分配占用更多的时间。分配大量的引用类型数据会使堆内存出现碎片,从而降低程序性能。如果你创建的类型意图存储数据的值,那么值类型是你要选择的。
4.如果你对下面所有问题回答YES,你应该创建值类型数据
1、类型的最基本的职责是存储数据吗?
2、它的属性上有定义完整的公共接口来访问或者修改数据成员吗?
3、我对类型决不会有子类自信吗?
4、我对类型决不会有多太性自信吗?
相关文章推荐
- 剑指offer—二叉搜索树的第k个结点
- 剑指offer—把二叉树打印成多行
- 剑指offer—按之字形顺序打印二叉树
- 实现点击不同的按钮加载不同的css
- 剑指offer—对称的二叉树
- 多角度了解Javascript闭包
- Bootstrap
- jquery向列表添加新元素
- 剑指offer—二叉树的下一个结点
- header('Content-type:text/html;charset = utf-8');出现中文乱码
- 剑指offer—删除链表中重复的结点
- javascript 笔试 做一个图片轮播的脚本
- 无需Flash无需依赖任何JS库实现文本复制与剪切
- 剑指offer—链表中环的入口结点
- 对于新增节点的JS操作问题
- Merge Two Sorted Lists & Remove Nth Node From End of List
- 剑指offer—字符流中第一个不重复的字符
- 剑指offer—构建乘积数组
- 剑指offer—数组中重复的数字
- React Native入门遇到的一些问题