您的位置:首页 > 编程语言 > C#

C# Stuct和Class的区别

2016-05-29 14:51 260 查看

【前言】

        今天看一本书的时候发现原来学过的struct结构体都快忘光了,所以赶紧查了很多资料,现在就来做一下总结吧!

Struct结构体是什么?

        我们在定义一个对象的时候,这个对象一定会有很多属性,如果说一个学生,他有姓名,年龄,专业,电话号码,家庭住址等属性,而这些数据的数据类型肯定会有所不同,有的是字符型,有的是整型,有的是浮点型,所以我们不可能单纯的声明一个数组来存放这些数据,因为数组中的字段的数据类型必须一致,这时,我们可以使用结构体来封装不同类型的属性,可是这时候,你会想到什么??没错,就是实体!!回想一下我们在做机房的时候,创建实体的时候使用的是什么??是Class,,那么问题来了!类类型和结构体类型又什么异同呢??

百度关于结构体的定义:在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

Struct声明格式

<span style="font-size:14px;">public struct Student//声明一个结构体类型Student
{
int num;//包括一个整型变量num
char name;//包括一个字符数组name,可以容纳20个字符
char sex;//包括一个字符变量sex
int age;//包括一个整型变量age
float score;//包括一个单精度型变量
}</span>


Struct和Class的异同

相同:

都是一种数据结构,都可以包含数据成员和方法成员
语法相似

辨析:

比较内容
结构

构造函数
支持(不能自定义,默认提供,作用是将所有的数据成员置零)
支持(能自定义)
析构函数
不支持
支持
变量初始化
不支持(private int num = 50 是错误的)
支持
继承
不支持(sealed类型)
支持
接口
可以实现多个接口
可以实现多个接口
是否必须使用new运 算符实例化


实例化时在栈还是堆分配内存

堆,栈中保存引用
该类型的变量可否被赋值为null

支持
类型
值类型
引用类型

关于赋值

结构类型:值类型,每一个结构都包含一份自己的数据,改变一个变量中的值,不会影响另一个变量的值

类类型:引用类型,当两个变量指向一个对象的时候,改变其中一个值,那么另一个值一定会受到影响,因为他们的引用地址是一样的

什么时候使用结构类型?(转载)

     因为结构是值类型,因此在为结构分配内存,或者当结构超出了作用域被删除时,性能会非常好,因为他们将内联或者保存在堆栈中。当把一个结构类型的变量赋值给另一个结构时,对性能的影响取决于结构的大小,如果结构的数据成员非常多而且复杂,就会造成损失,接下来使用一段代码来说明这个问题。
  结构和类的适用场合分析:
  1、当堆栈的空间很有限,且有大量的逻辑对象时,创建类要比创建结构好一些;
  2、对于点、矩形和颜色这样的轻量对象,假如要声明一个含有许多个颜色对象的数组,则CLR需要为每个对象分配内存,在这种情况下,使用结构的成本较低;
  3、在表现抽象和多级别的对象层次时,类是最好的选择,因为结构不支持继承。
  4、大多数情况下,目标类型只是含有一些数据,或者以数据为主。

【后记】

      查了很多资料,理论知识的真正理解,还得在实践中深刻!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: