说一个结构只是一个继承自 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
struct
System.ValueType
class
System.ValueType
此外,当然,正如您可能知道的那样,只是从System.ValueType
,派生出来struct
的有很多不同。class
但如果没有,我有一篇关于这里的一些关键区别的博客文章,包括但不限于:
struct
不能接受定义中其字段的初始化值(它们总是为其声明的字段类型提供值)。struct
可以有事件,但由于它们是值类型,因此必须注意不要订阅副本!struct
.struct
参数构造函数,struct
提供一个不能被覆盖的构造函数。struct
构造函数不会隐藏无参数构造函数。this
关键字struct
是值变量,而不是引用。new
来创建 a 的实例struct
(但如果您这样做,则必须在使用之前为所有字段提供一个值。MSDN 也有一些关于何时使用struct
vs的好建议class
。因为它们是值类型,所以您应该这样看待它们并将它们限制为更小的东西(16 字节或更少),最好是单个值的不可变表示(如DateTime
等TimeStamp
)。
Structs differ from classes in several important ways:
See also: Choosing Between Classes and Structures