次のことを考慮してください。
public class EntityBase<TEntity>
{
public virtual void DoSomethingWhereINeedToKnowAboutTheEntityType()
{
}
}
public class PersonEntity : EntityBase<PersonEntity>
{
public override void DoSomethingWhereINeedToKnowAboutTheEntityType()
{
}
}
これをコードに追加して実行すると、問題なく動作しましたが、継承するクラスに基づいた定義のクラスを継承できることに驚いています。
私がそれを試したとき、私はそれがコンパイルされないか、実際に呼び出されたら失敗することを期待していました。
あなたはインターフェースで同様のことをすることができます:
public interface IEntityBase<TEntity>
{}
public class PersonEntity : IEntityBase<PersonEntity>
{}
私は実際にインターフェースを使用して前者から後者にコードを切り替えましたが、なぜこれが機能するのかまだ興味があります。