如何通过检查其父类的泛型参数来获取子类类型?

时间:2015-06-03 12:44:31

标签: c# generics inheritance reflection asp.net-web-api2

示例:

    public class MyClass : AbstractClass<UserDTO>
    {
        public MyClass()
        {
        }

        public string Property1 { get; set; }

        public string Property2 { get; set; }
    }

是否可以通过检查UserDTO对象来获取MyClass的类型?如果有,怎么样? TIA。

2 个答案:

答案 0 :(得分:1)

我想你问的是:

  

AbstractClass<T>中是否存在T类型为UserDTO的方式,我可以确定X <的类class X : AbstractClass<UserDTO>的类型/ p>

如果这确实是你的问题,那么简短的回答是“是”。实现它的途径有点令人费解。

第一步,使用例如https://stackoverflow.com/a/4692463/7122获取系统中所有类型的列表。

下一步,对于每种类型,使用BaseType属性来获取其父类型。如果该类型为AbstractClass,请检查其GenericTypeArguments属性以查看它是否为UserDTO。如果是,那就是你的类型。

但是,不止一个类可能会从AbstractClass<UserDTO>继承,因此您必须检查所有类型以检查它,而不是在第一个匹配时停止。

答案 1 :(得分:0)

如果你有一个UserDTO类的实例而没有别的,那么我看不出你能够看到拥有的实例或MyClass类型的任何方式 - 你如何区分它和一个UserDTO在MyClass上?遗憾