8

私はいくつかの共分散/反分散のものを見ています.もっと広い質問がありますが、それはすべてこれに要約されます:

GenericRepository<BaseEntity> repo = new GenericRepository<ProductStyle>(context);

BaseEntity が ProductStyle の親抽象クラスであっても、これは機能しません。これを達成する方法はありますか?

4

2 に答える 2

0

このようなものも役立つかどうか疑問に思っています- 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

于 2013-08-13T12:16:53.673 に答える