Co sprawia, że ValueType klasy Special?
Kiedy próbuję zdefiniować klasę, która dziedziczy zSystem.ValueType
lubSystem.Enum
klasa, otrzymuję błąd:
Cannot derive from special class System.ValueType
Rozumiem ten błąd, ale to, czego nie mogłem zrozumieć, to właśnie toValueType
klasaspecjalny? Mam na myśli, że nie ma słowa kluczowego (jaksealed
) lub atrybut, aby określić, że tej klasy nie można odziedziczyć.ValueType
ma dwa atrybutySerializable
iComVisible
ale żaden z nich nie ma znaczenia w tej sprawiedokumentacja mówi:
Chociaż ValueType jest niejawną klasą bazową dla typów wartości,nie można utworzyć klasy, która dziedziczy bezpośrednio z ValueType. Zamiast tego poszczególne kompilatory udostępniają słowo kluczowe języka lub konstrukt (taki jak struct w C # i Structure… End Structure w Visual Basic), aby wspierać tworzenie typów wartości.
Ale to nie odpowiada na moje pytanie. Więc moje pytanie brzmi, w jaki sposób kompilator jest informowany w tym przypadku? Czy kompilator bezpośrednio sprawdza, czy klasa jestValueType
lubEnum
kiedy próbuję utworzyć klasę dziedziczącą z klasy?
Edytuj: Także wszystkie strukturyimplicitly
odziedziczyć zValueType
, aleEnum
klasaJawnie odziedziczyć zValueType
, więc jak to działa? Jak kompilator rozpoznaje tę sytuację, wszystko to jest kodowane przez kompilator?