我有一个派生自的通用抽象类:
abstract class SuperClass<T>
where T : SuperDataClass
abstract class SuperDataClass
数据类型仅限于SuperDataClass,所以每一个具体的数据类型都必须继承自SuperDataClass。 最后我有一对 SuperClass 和 SuperDataClass 继承者,例如:
class DataClassA : SuperDataClass
class ClassA : SuperClass<DataClassA>
class DataClassB : SuperDataClass
class ClassB : SuperClass<DataClassB>
我如何检查一个对象,例如ClassA 在不知道可能的数据类型的情况下继承自 SuperClass?
我尝试了以下方法,但不起作用:
if (testObject.GetType().IsAssignableFrom(typeof(SuperClass<SuperDataClass>))) {
Console.WriteLine("The test object inherits from SuperClass");
}
那么 if 语句应该是什么样子呢?
最佳答案
递归
Type type2 = type; // type is your type, like typeof(ClassA)
while (type2 != null)
{
if (type2.IsGenericType &&
type2.GetGenericTypeDefinition() == typeof(SuperClass<>))
{
// found
}
type2 = type2.BaseType;
}
请注意,如果您正在寻找一个接口(interface),这将不起作用!
关于c# - 如何判断对象是否继承自抽象泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18098717/