类与结构体
-
结构体是值类型,类是引用类型;结构体成员不能从继承自其他类或结构体,也不能被其他类或结构体继承(但可以实现接口),然而类可以,需要注意的是,所有的值类型都默认从ValueType类继承,ValueType类再从Object类继承。所以结构体对象仍然拥有超类Object的成员。
结构体成员不能在声明时赋值初始值,类可以,实际上,C#类成员初始化代码会被编译器放到构造函数中的最前边部分执行,而C++中根本没有这种方式,只能声明成员。不能为结构体提供无参构造函数,类中如果提供了自定义构造函数,就不会再提供默认无参构造函数。
结构体可以像类一样通过new 构造函数()来创建实例,也可以声明实例之后再赋值。结构体在自定义构造函数中必须为所有成员赋值。结构不允许声明析构函数(Destructor),而类并没有限制结构体之间的比较,类可以使用Equals来进行比较,而不能使用==操作符。且当结构体有成员是引用类型时,成员的比较是用 Object.ReferenceEquals 实现,即该引用类型的成员是否指向相同的引用。默认可访问性:结构体的成员默认public,类的成员默认private。类默认为internal。
结构体的类型是值类型,而类的类型是引用类型。值类型是用于存储数据的值,而引用类型用于存储对实际数据的引用。那么结构体就是当成值来使用的,而类则通过引用的方式来对实际数据操作。
结构使用栈存储(Stack Allocation)的方式,而类是使用堆存储(Heap Allocation)的方式。栈的特点是空间相对较小,但是存储在栈中的数据访问效率是相对较高的。堆的空间相对较大,但是存储在堆中的数据的访问效率相对较低。
类则是反映现实事物的一种抽象,而结构体的作用仅仅是一种包含了一些具体的不同类别数据的一种包装,结构体不具备类的继承多态特性。结构体赋值是直接赋值的值,而对象的指针赋值的是对象的地址。
但是堆栈的空间有限,对于大量的逻辑对象来说,创建一个类要比创建结构好一些。结构表示例如点、矩形和颜色这样的轻量对象,比方说,如果声明一个含有一千个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。
在表现抽象和多级别的对象层次时,类是最好的选择,大多数情况下该类型只是一些数据时,结构时最佳的选择。
西南地区IT社群(QQ)
- 云南
- 【昆明网页设计交流吧】243627302
- 【昆明nodejs交流吧】 243626749
- 【VUE】838405306
- 【云南程序员总群】343606807
- 【昆明UI设计】104031254
- 【云南软件外包】15547313
- 贵州
- 【PHP/java源码/站长交流群】55692114
- 四川
- 【成都Java/JavaWeb交流】86669225
- 【vaScript+PHP+MySql】116270060
- 【UI设计/设计交流学习群】135794928
- 重庆
- 【诺基亚 JAVA游戏博物馆】 559479780
- 【PHP,Java,Python,C++接单】 442103442
- 西藏