Получение абстрактного типа класса, из которого происходит класс - PullRequest
3 голосов
/ 01 февраля 2010

В .NET с использованием функции GetType возвращает конкретный тип класса объекта.Проблема в том, что я не знаю, каким будет тип, до времени выполнения, но я знаю, из какого абстрактного класса он получен (я использую абстрактные фабрики для создания адекватного класса).

Как можноя получаю реальный абстрактный тип класса?Это вообще возможно?

Ответы [ 2 ]

12 голосов
/ 01 февраля 2010

Type.BaseType сообщит вам тип, из которого происходит текущий тип. Вы можете рекурсивно вызывать Type.BaseType, пока Type.IsAbstract не станет true.

static class TypeExtensions {
    public static Type GetFirstAbstractBaseType(this Type type) {
        if (type == null) {
            throw new ArgumentNullException("type");
        }
        Type baseType = type.BaseType;
        if (baseType == null || baseType.IsAbstract) {
            return baseType;
        }
        return baseType.GetFirstAbstractBaseType();
    }

Использование:

Type abstractBase = typeof(Derived).GetFirstAbstractBaseType();
0 голосов
/ 01 февраля 2010

Я думаю, вы ищете свойство BaseType вне класса Type. Это получает тип, от которого ваш текущий тип напрямую наследует.

...