.net 获取类派生自的抽象类类型
在.NET中 使用GetType函数返回对象的具体类类型。问题是直到运行时我才知道类型是什么,但我知道它从哪个抽象类派生(我使用抽象工厂来创建适当的类) 如何获取实际的抽象类类型?甚至可能吗?将告诉您当前类型的派生类型。您可以递归调用.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
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的原因相同: