您的位置:首页 > 产品设计 > UI/UE

Distinguish Between Value Types and Reference Types - Effective C#学习笔记(6)

2008-06-18 21:47 399 查看
在C#中,
值类型(Value Type)是指用struct关键字声明的结构体
引用类型(Referecnce Type) 是指用class关键字声明的类

在本质上,我们这里说的
值类型是存储在栈(stack)上的,当执行到大括号结束时,会被自动弹出(Pop)。
引用类型是存储的堆(heep)上的,在栈上存储一个指向它(在堆上)的引用(其实就是指针)。

C++和C#不一样,在C++中,结构体和类除了成员的默认访问级别不同以外,完全相同。都相当与C#中的值类型。C++中的引用类型就是直接声明指针了。

引用类型的效率会比值类型低,这是因为引用类型要先找到它的指针,然后再到堆内存里去找实际的对象。值类型就少了这么一个过程。更重要的是,当引用类型的指针从栈中弹出时,它所指向的对象就跟断线的风筝似的,你再也无法访问到了,这就形成了垃圾(garbage)。需要等待垃圾回收器(GC)来把他们释放掉,这个过程是很耗时的。

在C#中,尽管struct的效率稍高,但是我们大多数情况还是在用class。这是因为struct不支持继承(支持接口实现),不支持多态,而且栈内存是有限的,不适合大量数据存储。在多数情况下,class完全面向对象,更加灵活。

究竟是选用struct还是class?有一个简单的原则,就是少量数据存储用struct,行为用class。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: