博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结构体(Struct) 和 类(Class)[转]
阅读量:4982 次
发布时间:2019-06-12

本文共 1244 字,大约阅读时间需要 4 分钟。

转自:

结构体(Struct) 和 类(Class) 

对于结构和类,初看上去都一样。都可以有自己的字段,属性,方法,还能有构造函数。但是这两者其实有很大的不同,而且各自有各自的应用范围。下面还是谈谈两者的分别吧。

1 结构的特点和性能优势
结构是值类型,继承自System.ValueType。结构相对于类来说有两个性能上的优势,结构通常分配在栈(Stack)上面,类的实际内容通常分配在堆(Heap)上面,访问栈的速度会比访问堆的速度更快。但是这并不是一个明显的优势。最主要的是栈上面的内容释放是非常快的,通常在函数调用结束以后,栈就自动释放了;但是对于堆来说,必须等待垃圾收集器(Garbage Collector)来收集,往往垃圾收集器的工作都有滞后特性,所以我们不一定当时就能注意到性能的变化,但是这种影响终究会体现出来。
2 结构的弱点
(1)作为参数传递的时候效率低
由于结构是值类型,所以在作为参数传递到其它方法的时候效率会比较低。因为当传递到其它方法的时候,会把结构中的所有内容复制到一个临时变量中,当结构很大的时候,效率就会很低下。尽管创建,访问或者销毁一个类相对说来是比较慢的操作,但是传递庞大的结构的开销要远远大于前者。
(2)装箱(Boxing)和解箱(Unboxing)效率低
当需要把结构传递到一个接受Object参数的方法的时候,效率会很低,因为这时候需要对结构进行装箱(Boxing),而且还很有可能会进行(解箱)Unboxing操作,这个操作的效率也是非常低下的。

通常类会有更多的灵活性。结构不能自定义默认的构造函数,而且不可以在声明字段(Field)的时候进行初始化。当在结构中声明字段的时候,会自动地赋予默认的初始值。但是结构可以接受有参数的构造函数。结构可以从接口(Interface)继承,但是不可以从结构或者类继承。所以多态性对于结构来说也不可能。

3 何时使用结构,何时使用类?

在下面的情况下使用类
1 内容很多的时候,因为结构总是暗地里拷贝了一个临时变量。
2 需要非常多内存的时候,因为栈的容量有限,而堆通常是足够使用的。
3 需要在声明字段的时候进行初始化。
4 需要从基类继承。
5 需要多态性。接口也可以用来实现多态性,但是因为结构是值类型,尽管它可以从接口继承,但是在多态过程中会进行装箱和解箱的操作。

在下面的情况下使用结构

1 希望能够象原始类型(比如int,double之类的)一样使用它。比如我们可以声明一个复数结构,然后像double类型一样地使用它。
2 需要的内存较少,栈可以完全地容纳它。
3 想避开垃圾收集器的处理,自己掌握资源的释放。
4 只需要缺省的值,而不需要在声明字段的时候赋值。
5 不需要从基类继承,当然,不包括ValueType。
6 不需要多态行为。

转载于:https://www.cnblogs.com/zhujingyuan/archive/2007/09/23/903434.html

你可能感兴趣的文章
HUST 1328 String (字符串前缀子串个数 --- KMP)
查看>>
[转]C,C++开源项目中的100个Bugs
查看>>
Linux内核spin_lock与spin_lock_irq分析
查看>>
html input中 button和submit的区别
查看>>
ionic实现点击popup区域外部分来关闭popup
查看>>
Android 架构 3.实现
查看>>
spring+mybatis整合读取不了配置文件
查看>>
字典dict
查看>>
iostat命令
查看>>
认清世界,认清自我,超凡脱俗
查看>>
在yii框架中如何连接数据库mongodb
查看>>
广播发送者与广播接收者
查看>>
只 能处理少于 32766 个字符的字符串
查看>>
表达式语言之EL表达式
查看>>
需求分析
查看>>
解决Win7下网络应用只有进程没有界面的问题
查看>>
半监督学习(一)
查看>>
[置顶] SPL讲解(6)--Condition篇
查看>>
在MyEclipse中配置Weblogic10服务器
查看>>
浙江大学PAT上机题解析之2-11. 两个有序链表序列的合并
查看>>