我想创建一个基于通用抽象类的类层次结构。我需要能够在代码库中识别我的子类。我尝试使用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<>
}