如何检测泛型抽象类的子类?



我想创建一个基于通用抽象类的类层次结构。我需要能够在代码库中识别我的子类。我尝试使用Type.IsSubclassOf,但它没有按预期工作。

namespace TestIsSubclassOf
{
public class Program
{
private static void Main()
{
var testClass = typeof(TestClass);
var isSubclass = testClass.IsSubclassOf(typeof(TestBaseClass<>)); // expected - true, actual - false
}
}
public abstract class TestBaseClass<T>
{
}
public class TestClass : TestBaseClass<int>
{
}
}

识别TestBaseClass子类的正确方法是什么?

您需要检查您的testClass是否是TestBaseClass<int>的子类而不是TestBaseClass<>,因为您可以从此类的不同泛型"版本"继承。

因此,使用以下代码isSubclass返回true

var testClass = typeof(TestClass);
var isSubclass = testClass.IsSubclassOf(typeof(TestBaseClass<int>));

如果要检查类是否继承TestBaseClass而不考虑使用的泛型类型,则可以尝试以下操作:

var testClass = typeof(TestClass);
if (testClass.BaseType.IsGenericType &&
testClass.BaseType.GetGenericTypeDefinition() == typeof(TestBaseClass<>))
{
//testClass inherits from TestBaseClass<>
}

最新更新