.net 获取类派生自的抽象类类型

.net 获取类派生自的抽象类类型,.net,abstract-class,gettype,.net,Abstract Class,Gettype,在.NET中 使用GetType函数返回对象的具体类类型。问题是直到运行时我才知道类型是什么,但我知道它从哪个抽象类派生(我使用抽象工厂来创建适当的类) 如何获取实际的抽象类类型?甚至可能吗?将告诉您当前类型的派生类型。您可以递归调用Type.BaseType,直到true static class TypeExtensions { public static Type GetFirstAbstractBaseType(this Type type) { if (type

在.NET中 使用GetType函数返回对象的具体类类型。问题是直到运行时我才知道类型是什么,但我知道它从哪个抽象类派生(我使用抽象工厂来创建适当的类)

如何获取实际的抽象类类型?甚至可能吗?

将告诉您当前类型的派生类型。您可以递归调用
Type.BaseType
,直到
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();

我认为您正在寻找类型类之外的属性。这将获取当前类型直接从中继承的类型。

如果您“知道它从哪个抽象类派生”,为什么需要获取抽象类?强制转换不是一个选项吗?如果没有找到ABC,则返回
null
将与其他
Type
方法更加一致。(例如,
BaseType
GetNestedType
GetElementType
,等等)。到第二个280Z28。。。对于不是从任何抽象类派生的类型,您将得到ArgumentNullException。@Daniel Brückner:对不起,我不明白您的意思。我想对于任何没有抽象基的类,我的代码都会返回
null
。@280Z28:我同意编辑,但我不同意抛出
null引用异常
ArgumentNullException
更好地描述了异常情况;
NullReferenceException
会产生误导,因为我们实际上没有尝试取消对
null
引用的引用。事实上,我认为没有理由抛出
NullReferenceException
;CLR可以做到这一点。+1:用于调用类TypeExtensions。哦,我重命名该方法的原因与它返回null的原因相同: