O que torna a classe ValueType especial?
Quando estou tentando definir uma classe que herda deSystem.ValueType
ouSystem.Enum
classe, estou recebendo um erro:
Cannot derive from special class System.ValueType
Eu entendo esse erro, mas o que eu não conseguia entender é o que fazValueType
classeespecial? Quero dizer, não há palavra-chave (comosealed
) ou atributo para especificar que essa classe não pode ser herdada.ValueType
tem dois atributos,Serializable
eComVisible
mas nenhum deles é relevante para esse caso.documentação diz:
Embora ValueType seja a classe base implícita para tipos de valor,você não pode criar uma classe que herda diretamente do ValueType. Em vez disso, os compiladores individuais fornecem uma palavra-chave ou um construto de linguagem (como struct em C # e Structure… End Structure no Visual Basic) para oferecer suporte à criação de tipos de valor.
Mas isso não responde à minha pergunta. Então, minha pergunta é como o compilador é informado nesse caso? O compilador verifica diretamente se a classe éValueType
ouEnum
quando tento criar uma classe que herda de uma classe?
Edit: Também todas as estruturasimplicitly
herdar deValueType
, masEnum
classeExplicitamente herdar deValueType
, então como está funcionando? Como o compilador descobre essa situação, tudo isso é codificado pelo compilador?