是否有可能以编程方式强制派生类将自身作为泛型类型传递给基类?

mic*_*ael 5 c# generics

基本上,我有以下情况:

public abstract class FooBase<T> where T : FooBase<T>
{
    public bool IsSpecial { get; private set; }

    public static T GetSpecialInstance()
    {
        return new T() { IsSpecial = true };
    }
}

public sealed class ConcreteFooA : FooBase<ConcreteFooA> { ... }
public sealed class ConcreteFooB : FooBase<ConcreteFooB> { ... }
Run Code Online (Sandbox Code Playgroud)

但是,我在这里看到的问题是我可以完成ConcreteFooB : FooBase<ConcreteFooA> { ... },这会在运行时完全弄乱类(它不符合我想要实现的逻辑),但仍然可以正确编译.

有没有什么方法我没有想到强制执行泛型T,无论派生类是什么?


更新:我最终在类中使用泛型参数T,FooBase<T>我只是没有列出每个将它作为out和in参数的方法,但我确实有一个用于T.

Dan*_*rth 3

回答你的问题:

不,没有编译时解决方案来强制执行此操作。