类是属于引用类型而结构是属于值类型。引用类型被分配在堆中,并且内存管理会通过垃圾回收器而被处理。而值类型则被分配在堆栈或内嵌空间中并且在它们超出作用范围时候会被清除。通常,值类型的分配与清除是更加廉价的操作。但是,如果它们被用在需要进行大量的装箱与拆箱操作的情节中时,它们将与被比较的引用类型一样蹩脚地被完成。关于更多信息,请参考:[装箱与拆箱(C# 编程指南)]。
关于值类型和引用类型的附加信息,请参考:[公共类型系统概览]。
如果在类的实例是比较小巧并且通常只会短期存在或者被嵌入在其他对象中的时候,就要考虑定义一个结构来代替一个类。
除了类型拥有下列的所有特征以外,不要随意定义一个结构:
- 它从逻辑上呈现了一个单独的值,类似于简单的类型(整数、双精度类型,以及等等)。
- 它的实例的尺寸小于 16 个字节。
- 它是不可变的。
- 它不会频繁地被装箱。
如果不适应这些条件中的一个或多个,就要创建引用类型来代替一个结构。同时,对于这个指导方针的疏忽能够消极地对性能产生影响。