说一个结构只是一个继承自 System.ValueType 的类是真的吗?
关键字“struct”是否只是用于编写名称后带有 : System.ValueType 的类的语法糖?
如果它只是一个类,那么说并非所有类都是引用类型,因为结构在技术上是类,这是真的吗?
说一个结构只是一个继承自 System.ValueType 的类是真的吗?
关键字“struct”是否只是用于编写名称后带有 : System.ValueType 的类的语法糖?
如果它只是一个类,那么说并非所有类都是引用类型,因为结构在技术上是类,这是真的吗?
不完全是“只是语法糖”。从MSDN:
尽管 ValueType 是值类型的隐式基类,但您不能创建直接从 ValueType 继承的类。相反,各个编译器提供语言关键字或构造(例如 C# 中的 struct 和 Visual Basic 中的 Structure...End Structure)来支持值类型的创建。
那么你能说 astruct只是从语义class上继承的a吗?那值得商榷。所有都派生自,但您不能显式创建派生自 的。System.ValueType structSystem.ValueTypeclassSystem.ValueType
此外,当然,正如您可能知道的那样,只是从System.ValueType,派生出来struct的有很多不同。class但如果没有,我有一篇关于这里的一些关键区别的博客文章,包括但不限于:
struct不能接受定义中其字段的初始化值(它们总是为其声明的字段类型提供值)。struct可以有事件,但由于它们是值类型,因此必须注意不要订阅副本!struct.struct参数构造函数,struct提供一个不能被覆盖的构造函数。struct构造函数不会隐藏无参数构造函数。this关键字struct是值变量,而不是引用。new来创建 a 的实例struct(但如果您这样做,则必须在使用之前为所有字段提供一个值。MSDN 也有一些关于何时使用structvs的好建议class。因为它们是值类型,所以您应该这样看待它们并将它们限制为更小的东西(16 字节或更少),最好是单个值的不可变表示(如DateTime等TimeStamp)。
Structs differ from classes in several important ways:
See also: Choosing Between Classes and Structures