C# Docs中是这么描述class和struct的:
Each is essentially a data structure that encapsulates a set of data and behaviors that belong together as a logical unit.
相比于C中的.c文件所代表的(相对来说是)物理单元,C#中的class和struct毫无疑问是逻辑单元,这个逻辑单元中定义了一系列和其名称相关的field/property/method/event,来表现它们的数据和行为。编程其实本质上是数据的修改,虽然它表现为复杂的多层函数调用。
和Java不同,C#除了基本数据类型,还有struct专门用于值类型的定义。
引用型
相比于struct,
class更适合于更多数据/更抽象/与其他数据结构有更强联系/更复杂行为的数据结构的类型。
值类型,适用于封装较少的数据。一般被设计为struct的数据结构,它的行为(方法)都比较少,其所有字段都被视为一个整体。struct有以下特点
复制struct时,实际产生了原实例的一个副本,返回了新实例。 新实例拷贝了原有对象的所有数据,某个field的类型为引用类型,只复制引用,所以新实例和原实例的该field都指向同一个对象。 如果在复制一个数据结构时,只希望它的副本是快照形式,而非实时表现它最新状态,那么它最好是struct。
对于struct来说,改变副本的值,并不能改变被复制的实例的值,这个错误却容易犯。
struct设计技巧:
值类型,它的数据只有那些枚举常量,不包含任何方法。这一点和java中不同,java的enum可以定义自己的行为。