这个问题可能很多初学者都知道,用C#写了这么久的程序,类和结构用了很久却并不知道他们之间的本质区别。 在很多时候,他们只是声明的时候关键字的不同,一个是class,一个是struct而已。 本质上的区别在于:
类
- 类是属于引用类型,引用类型是在堆上面分配地址。
类对象之间的赋值是通过复制引用实现的。
- 除非明确的对类进行了sealed,否则类是可以继承其他类和接口且本身也可被继承。
- 内部结构区别:
- 有默认的构造函数。
- 有析构函数。
- 可以使用abstract和sealed。
- 有protected修饰符。
- 必须使用new初始化。
结构
- 结构属于值类型,值类型在堆栈上分配地址。
- 所有基类型都是结构类型,如int 对应的是System.int32结构。
- 堆栈的执行效率更高,但资源有限,不适合处理逻辑复杂的对象。
- 结构体对象之间赋值是创建新的结构。
- 不能从另外的结构继承,本身也不能够被继承
- 内部结构区别:
- 没有默认的构造函数,但是能够添加构造函数。
- 没有abstract和sealed。
- 不能有protected修饰符。
- 可以不使用new初始化。
- 在结构初始化实例字段是错误的。
谈了这么多,那么什么时候使用类,什么时候使用结构体呢?
- 堆栈空间有限,对于有大量逻辑的对象,使用类比结构体好一些。
- 在表示抽象和多级别层次的对象时,使用类是更好的选择。
- 在大多数情况下对象的类型只是数据时,使用结构是最好的选择。