【问题标题】:How to detect a subclass of a generic abstract class? [duplicate]如何检测泛型抽象类的子类? [复制]
【发布时间】:2019-09-30 21:08:12
【问题描述】:

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

【问题讨论】:

    标签: c# .net-core system.type


    【解决方案1】:

    您需要检查您的testClass 是否是TestBaseClass&lt;int&gt; 的子类而不是TestBaseClass&lt;&gt;,因为您可以从此类的不同通用“版本”继承。

    所以使用下面的代码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<>
    }
    

    【讨论】:

    • 这是通用的吗?我认为关键是 OP 不知道底层类型 (int)。
    • @JuanR 也为这种情况添加了解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多