是什么让ValueType类特别?

Sel*_*enç 10 c# inheritance compiler-errors

当我试图定义一个继承自System.ValueTypeSystem.Enum类的类时,我收到一个错误:

Cannot derive from special class System.ValueType
Run Code Online (Sandbox Code Playgroud)

我理解这个错误,但是我无法理解的是什么让ValueType课程变得特别?我的意思是没有关键字(like sealed)或属性来指定不能继承此类.ValueType有两个属性,SerializableComVisible而是与case.The他们都不是相关文件说:

尽管ValueType是值类型的隐式基类,但您无法创建直接从ValueType继承的类.相反,单个编译器提供语言关键字或构造(例如C#中的struct和Visual Basic中的Structure ... End Structure)以支持值类型的创建.

但它没有回答我的问题.所以我的问题是在这种情况下如何通知编译器?编译器是否直接检查该类是否ValueTypeEnum当我尝试创建从类继承的类时?

编辑:所有结构implicitly都继承自ValueType,但是明确地继承了Enum类,那么它是如何工作的?编译器如何弄清楚这种情况,所有这些都是由编译器硬编码的?ValueType

Eri*_*ert 17

我理解错误,但我无法理解的是什么使ValueType类特别?

该课程被记录为特殊.这就是它的特殊之处.

在这种情况下如何通知编译器?

编译器编写者在编写编译器之前会读取文档.

当我尝试创建一个从类继承的类时,编译器是否直接检查该类是ValueType还是Enum?

是.

此外,所有结构都隐式继承自ValueType,但Enum类显式继承自ValueType,那么它是如何工作的呢?

它工作得很好.

是否所有这些特殊情况都硬编码到编译器中?

是.

是否更适合创建一个属性来指定此类是特殊的并且不能继承而不是硬编码?

不,这不对.这意味着第三方也可以创建一个特殊类型,在继承时需要编译器进行特殊处理.然后,第三方将如何修改编译器以实现这些规则?

  • "它运作得很好." - 最佳答案. (11认同)
  • @ Selman22:框架设计指南是关于一组类的公共表面区域,而不是它的实现细节. (2认同)