gpt4 book ai didi

c# - 结构只是一个派生自 ValueType 的类吗?

转载 作者:太空宇宙 更新时间:2023-11-03 17:14:59 24 4
gpt4 key购买 nike

结构体只是一个继承自 System.ValueType 的类,对吗?

关键字“struct”是否只是编写一个类的语法糖:名称后有 System.ValueType?

如果它只是一个类,那么不是所有的类都是引用类型是真的吗,因为结构在技术上是类?

最佳答案

不完全是“只是语法糖”。来自MSDN :

Although ValueType is the implicit base class for value types, you cannot create a class that inherits from ValueType directly. Instead, individual compilers provide a language keyword or construct (such as struct in C# and Structure…End Structure in Visual Basic) to support the creation of value types.

所以可以你说 struct只是一个class继承自 System.ValueType 语义?那值得商bat。全部struct源自 System.ValueType , 但您不能显式创建 class源自 System.ValueType .

此外,当然,只是从System.ValueType导出, structclass有很多不同你可能知道。但如果不是,我有一篇关于一些关键差异的博客文章 here ,包括但不限于:

  • 当然,值类型是按值传递和分配的,而不是按引用。
  • A struct不能接受定义中字段的初始化值(他们总是为其声明的字段类型提供值)。
  • A struct可以有事件,但由于它们是值类型,所以必须注意不要订阅副本!
  • 您不能继承自 struct .
  • 您不能创建struct无参数构造函数,struct提供一个不能被覆盖的。
  • 创建重载 struct构造函数不隐藏无参数构造函数。
  • this关键字,用于 struct是值变量,不是引用。
  • 您不需要使用 new创建 struct 的实例(但如果您这样做,您必须在使用前为所有字段提供一个值。

MSDN 也有一些关于何时使用 struct 的好建议对比class .因为它们是值类型,所以您应该这样看待它们并将它们限制为更小的东西(16 字节或更少)并且最好是单个值的不可变表示(如 DateTimeTimeStamp 等)。

关于c# - 结构只是一个派生自 ValueType 的类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18647892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com