基本的に、次のシナリオがあります。
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> { ... }
しかし、ここで私が目にする問題はConcreteFooB : FooBase<ConcreteFooA> { ... }
、実行時にクラスを完全に台無しにする可能性があることです (達成しようとしているロジックを満たしていません) が、それでも正しくコンパイルされます。
派生クラスが何であれ、ジェネリック T を強制するために私が考えていなかった方法はありますか?
更新:クラスで汎用パラメーター T を使用するFooBase<T>
ことになります。それを out および in パラメーターとして持つすべてのメソッドをリストしたわけではありませんが、T の使用はあります。