3

今日、私の脳は死んでしまい、コンパイラにジェネリック推論に継承を強制的に使用させる明確な方法を見つけることができませんでした。

次の4つのクラスを想像してください

モデル

public abstract class Model
{

}

public class CodePerfModel : Model
{

}

エンティティ

public abstract class ModelEntity<TModel> where TModel : Model
{
    public TModel Model { get; set; }

}

public class CodePerfEntity : ModelEntity<CodePerfModel>
{

}

ここで、論理的には、継承するクラスはそれを指定する必要があるため、継承を介して継承するものModelEntity<>(のタイプを指定する)を取得するときは当然のことと見なす必要があります。TModelModelEntity<>

コンパイラにこれを強制的に理解させる方法はありますか?

例えば

現在 を使用したい場合はModelEntity<>、そのタイプを指定する必要があります。次のような:

public class CallerClass<TEntity, TModel>
    where TEntity : ModelEntity<TModel>
    where TModel : Model
{

}

TModelどこでも議論を取り除くにはどうすればよいですか?コンパイル時に TModel 型に引き続きアクセスできますか? たとえば、 baseModelプロパティを介して。

私にとっては、次のようなものです。

public class CallerClass<TEntity>
    where TEntity : ModelEntity<>
{

}

それを呼び出すとき、私が特定しなければならないのは、例えば

SomeCall<CodePerfEntity>();

それよりも

SomeCall<CodePerfEntity, CodePerfModel>();

これは現在可能なことでしょうか?

これは C# 6/7 用に調達する価値がありますか?

4

1 に答える 1