Класс Type содержит больше трёх десятков методов, позволяющих получать информацию об описываемом типе. Так можно узнать какое-либо свойство типа или наличие (и значение) определённого атрибута, выяснить принадлежность типа к некоторому семейству.
Методы, позволяющие получать информацию о типе, приведены в таблице 2.1.
Вот, например, как можно с помощью этих свойств получить описание семейства типа:
string GetTypeDescription(Type type)
{ return type.IsClass ? "class"
: type.IsInterface ? "interface"
: type.IsArray ? "array"
: type.IsEnum ? "enum"
: type.IsValueType ? "struct"
: "";
}
Таблица 2.1 - Методы, позволяющие получать информацию о типе
| IsAbstract
| Является ли тип абстрактным классом или интерфейсом
|
| IsClass
| Класс ли это? (т.е. не value Type и не интерфейс)
|
| IsSealed
| Может ли тип иметь наследников?
|
| IsInterface
| Это интерфейс? (Заметьте, интерфейс - это не класс!)
|
| IsCOMObject
| А уж не COM-объект ли скрывается под видом класса .NET?
|
| IsValueType
| Это value type (тип-значение)?
|
| IsEnum
| Это перечисление?
|
| IsPrimitive
| Не является ли тип примитивным (т.е. одним из bool, byte, sbyte, short, ushort, int, uint, long, ulong, char, double, float)?
|
| IsArray
| Является ли тип массивом. Тип элементов массива можно получить с помощью свойства ElementType.
|
| IsPointer
| Является ли тип ссылкой? Тип указываемого объекта можно получить с помощью свойства ElementType.
|
| IsByRef
| А уж не тип ли это параметра, передаваемого по ссылке? Если да, то тип передаваемого объекта можно получить с помощью свойства ElementType.
|
| HasElementType
| HasElementType = IsArray || IsPointer || IsByRef. Т.е. тип является не самостоятельным типом, а лишь "производным от" ElementType.
|