基本上,我有以下情况:
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.