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

在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。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值