私はいくつかの共分散/反分散のものを見ています.もっと広い質問がありますが、それはすべてこれに要約されます:
GenericRepository<BaseEntity> repo = new GenericRepository<ProductStyle>(context);
BaseEntity が ProductStyle の親抽象クラスであっても、これは機能しません。これを達成する方法はありますか?
このようなものも役立つかどうか疑問に思っています- GenericRepository の定義に制限を使用して、可能な基本タイプを制限しT
ます。
void Main()
{
var repo = new GenericRepository<ProductStyle>(new ProductStyle());
Console.WriteLine(repo.ToString()); //just output something to make sure it works...
}
// Define other methods and classes here
public class GenericRepository<T> where T : BaseEntity {
private readonly T _inst;
public GenericRepository(T inst){
_inst = inst;
_inst.DoSomething();
}
}
public class BaseEntity {
public Int32 Id {get;set;}
public virtual void DoSomething() { Console.WriteLine("Hello"); }
}
public class ProductStyle : BaseEntity {
}
したがって、メソッドがあるGetRepo<T>
場合、そのメソッドは T の GenericRepository を返すことができ、それT
が の子であることが保証されますBaseEntity
。