C# 类与结构的区别

这个问题可能很多初学者都知道,用C#写了这么久的程序,类和结构用了很久却并不知道他们之间的本质区别。
在很多时候,他们只是声明的时候关键字的不同,一个是class,一个是struct而已。
本质上的区别在于:

  • 类是属于引用类型,引用类型是在堆上面分配地址。

类对象之间的赋值是通过复制引用实现的。

  • 除非明确的对类进行了sealed,否则类是可以继承其他类和接口且本身也可被继承。
  • 内部结构区别:
  • 有默认的构造函数。
  • 有析构函数。
  • 可以使用abstract和sealed。
  • 有protected修饰符。
  • 必须使用new初始化。

结构

  • 结构属于值类型,值类型在堆栈上分配地址。
  • 所有基类型都是结构类型,如int 对应的是System.int32结构。
  • 堆栈的执行效率更高,但资源有限,不适合处理逻辑复杂的对象。
  • 结构体对象之间赋值是创建新的结构。
  • 不能从另外的结构继承,本身也不能够被继承
  • 内部结构区别:
  • 没有默认的构造函数,但是能够添加构造函数。
  • 没有abstract和sealed。
  • 不能有protected修饰符。
  • 可以不使用new初始化。
  • 在结构初始化实例字段是错误的。

谈了这么多,那么什么时候使用类,什么时候使用结构体呢?

  1. 堆栈空间有限,对于有大量逻辑的对象,使用类比结构体好一些。
  2. 在表示抽象和多级别层次的对象时,使用类是更好的选择。
  3. 在大多数情况下对象的类型只是数据时,使用结构是最好的选择。