从封闭类型派生自

时间:2017-04-28 16:18:25

标签: c# generics reflection static

如果我有一个带静态构造函数和约束的泛型类型

interface IMyInterface
{
...
}

class MyGeneric<T> where T : IMyInterface
{
    static MyGeneric()
    {
    ....
    }
}

封闭式:

class MyClass : MyGeneric<TypeImplementingIMyInterface>
{
    ...
}

是否有可能通过反射从MyGeneric 中的静态构造函数中检索闭合类型(MyClass)的类型?如果是这样,如何

到目前为止,我已经尝试过没有成功:

  • var t = typeof(MyGeneric<>);
  • var t = MethodBase.GetCurrentMethod().GetType();

我知道我可以使用Curiously Recurring Template Pattern来做我想要的事情:

interface IMyInterface
{
}

class MyBase
{

}

class MyGeneric<T1, T2> : MyBase where T1 : IMyInterface, T2 : MyBase
{
    static MyGeneric()
    {
        var t = typeof(T2);
        // ...
    }
}

class MyClass : MyGeneric<TypeImplementingIMyInterface, MyClass>
{
    // ...
}

我想知道是否有其他方法可用于所述方案。

如果答案是答案,我接受否定答案。

1 个答案:

答案 0 :(得分:0)

来自Evk的评论是对该问题的间接回答:

  

是的,但是封闭类型是MyGeneric,而不是MyClass。   您可以像往常一样获取当前关闭类型:typeof(MyGeneric),但这样会   当然不是MyClass,因为这是完全不同的类型。

所以答案可以是: 假设MyClass与MyGeneric是同一个类是错误的,因此从泛型类型中无法获得MyClass的类型。