说结构只是一个继承自System.ValueType的类吗?
关键字“struct”是否只是用于编写类的语法糖:名称后面是System.ValueType?
如果它只是一个类,那么说并非所有类都是引用类型是正确的,因为结构在技术上是类吗?
答案 0 :(得分:10)
不完全“只是语法糖”。来自MSDN:
虽然ValueType是值类型的隐式基类,但是 无法创建直接从ValueType继承的类。代替, 个人编译器提供语言关键字或构造(例如 结构在C#和Structure ...结构在Visual Basic中)支持 创造价值类型。
所以可以你说struct
只是class
从System.ValueType
继承语义?这是值得商榷的。所有struct
都来自System.ValueType
,但您无法明确创建源自class
的{{1}}。
此外,当然,仅仅源自System.ValueType
,System.ValueType
与您可能知道的struct
有很多不同之处。但如果没有,我有一篇关于一些主要差异的博客文章here,包括但不限于:
class
无法接受定义中字段的初始化值(它们始终为其声明的字段类型指定值)。struct
可以有事件,但由于它们是值类型,因此必须注意您没有订阅副本!struct
。struct
无参数构造函数,struct
提供了一个无法覆盖的构造函数。struct
构造函数不会隐藏无参数构造函数。struct
中使用的this
关键字是值变量,而非参考。struct
创建new
的实例(但如果您这样做,则必须在使用之前为所有字段提供值。 MSDN对于何时使用struct
vs struct
也有一些很好的建议。因为它们是值类型,所以你应该将它们视为这样,并将它们限制为较小的东西(16字节或更少),最好是单个值的不可变表示(如class
,DateTime
等)。
答案 1 :(得分:5)
结构在几个重要方面与类不同: