我有两个不同的类,它们来自一个基类。它们每个都有一个从另一个基类派生的集合,但是派生类不同。

class MasterA : MasterBase<ClientA>
class MasterB : MasterBase<ClientB>

public class MasterBase<ClientClass> where ClientClass : ClientBase
{
    public List<ClientClass> Clients;
}

Class ClientA : ClientBase
Class ClientB : ClientBase

Class ClientBase


我想要的是具有一个UserControl,该控件可与两种类型(A或B)的主/客户端的父/子列表一起使用。

public class Test<MasterClass> where MasterClass : MasterBase<ClientBase>
{
    GenericRepository<MasterClass> repo = new GenericRepository<MasterClass>();
    MasterClass master = repo.GetAll;
    // do some changes to (base fields of) the master collection and its client collection !
    repo.SaveOrUpdate(master);
}


但是..我无法实例化该Test类..

var t = new Test<MasterA>();
>> There's no implicit reference conversation from MasterA to MasterBase<ClientBase>


因此,有什么方法可以修改Test类以执行我指示的操作?
  会非常感谢一些提示。

最佳答案

由于不知道您在处理什么限制,因此最初将其发布为评论。



public class Test<MasterClass,U> where MasterClass : MasterBase<U> where U: ClientBase


对您的代码库进行适当的更改?显然,这行还必须更改:

var t = new Test<MasterA,ClientA>();


问题在于,仅因为两个类XY之间存在继承关系,并不意味着通用类型G<X>G<Y>具有相同(或任何)继承关系。因此MasterBase<ClientA>不会从MasterBase<ClientBase>继承

10-07 22:47