如何检测通用摘要 class 的子 class?
How to detect a subclass of a generic abstract class?
我想创建一个基于通用抽象 class 的 class 层次结构。我需要能够在代码库中识别我的 subclasses。我尝试使用 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
子class的正确方法是什么?
您需要检查您的 testClass
是否是 TestBaseClass<int>
的子 class 而不是 TestBaseClass<>
,因为您可以继承自不同的泛型 'version' class.
所以使用下面的代码isSubclass
returns true
:
var testClass = typeof(TestClass);
var isSubclass = testClass.IsSubclassOf(typeof(TestBaseClass<int>));
如果您想检查 class 是否继承 TestBaseClass
而不管使用的泛型类型,您可以尝试以下操作:
var testClass = typeof(TestClass);
if (testClass.BaseType.IsGenericType &&
testClass.BaseType.GetGenericTypeDefinition() == typeof(TestBaseClass<>))
{
//testClass inherits from TestBaseClass<>
}
我想创建一个基于通用抽象 class 的 class 层次结构。我需要能够在代码库中识别我的 subclasses。我尝试使用 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
子class的正确方法是什么?
您需要检查您的 testClass
是否是 TestBaseClass<int>
的子 class 而不是 TestBaseClass<>
,因为您可以继承自不同的泛型 'version' class.
所以使用下面的代码isSubclass
returns true
:
var testClass = typeof(TestClass);
var isSubclass = testClass.IsSubclassOf(typeof(TestBaseClass<int>));
如果您想检查 class 是否继承 TestBaseClass
而不管使用的泛型类型,您可以尝试以下操作:
var testClass = typeof(TestClass);
if (testClass.BaseType.IsGenericType &&
testClass.BaseType.GetGenericTypeDefinition() == typeof(TestBaseClass<>))
{
//testClass inherits from TestBaseClass<>
}