2016-03-22 4 views
-2

Почему это выражениеПочему System.ValueType не является ValueType?

typeof(System.ValueType).IsValueType 

возвращение ложным?

+1

Возвращает true, если Тип является типом значения; в противном случае - false. –

+6

[Читать документы] (https://msdn.microsoft.com/en-us/library/system.type.isvaluetype (v = vs.110) .aspx): "* Это свойство возвращает false для класса ValueType, потому что ValueType не является самим типом значений. Это базовый класс для всех типов значений, и поэтому ему может быть присвоен любой тип значения. Это было бы невозможно, если сам ValueType был типом значения. Типы значений вставляются в квадрат, когда они присвоенный полю типа ValueType. * " –

ответ

0

Из MSDN Type.IsValueType Property

Это свойство возвращает ложь для класса ValueType, потому что ValueType не сам тип значения. Это базовый класс для всех типов значений, , и поэтому ему может быть присвоен любой тип значения. Это не было бы , если бы ValueType сам был типом значения. Типы значений помещаются в поле , если они назначены полю типа ValueType.

Из MSDN ValueType Class (System)

Хотя ValueType является неявным базовым классом для типов значений, вы не можете создать класс, который наследуется от ValueType непосредственно. Вместо этого отдельные компиляторы предоставляют языковое ключевое слово или конструкцию (например, struct in C# и Structure ... End Structure в Visual Basic), чтобы поддерживать создание типов значений.

Поэтому, поскольку это класс, а не структура, можно было бы ожидать, что он будет ссылочным типом, так как указывает первая ссылка.

Смежные вопросы