Я работаю над методом, использующим отражение для проверки типов параметров методов. Эти методы повторяются через ParameterInfo и делают что-то с типами этих параметров.
Я всегда был в предположении, что если TypeInfo.IsClass
true
, этот тип является классом и всегда выводится (косвенно) из типа object
(за исключением случаев, когда тип object
сам, разумеется). Итак, если TypeInfo.IsClass
истинно, TypeInfo.BaseType
должен быть установлен.
Ну, мое предположение было неправильным! Существуют классы, которые НЕ относятся к типу object
. И мое предположение испортило мой код.
Например:
Type type = typeof(int).MakeByRefType();
type.IsClass
будет true
, а type.BaseType
будет null
.
Если вы думаете об этом, это логично. И я могу предотвратить сбой моего кода, проверив TypeInfo.IsByRef
.
Теперь мой вопрос: существуют ли еще такие "экзотические" типы (помимо типов ByRef и type object
), которые являются классом (IsClass == true
), но не имеют базового типа (BaseType == null
)
Прежде чем ответить: я говорю только о типах, где IsClass == true
! И мой пример с типом int
был всего лишь примером. Это мог быть любой тип.
Поэтому, пожалуйста, нет:
- Интерфейсы
- Структуры
- Пустота
Ответы:
- Типы ByRef (
T&
): как указано в вопросе. - Типы указателей (
T*
): Найден Марк Гравелл.