我有两个不同的类,它们来自一个基类。它们每个都有一个从另一个基类派生的集合,但是派生类不同。
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>();
问题在于,仅因为两个类
X
和Y
之间存在继承关系,并不意味着通用类型G<X>
和G<Y>
具有相同(或任何)继承关系。因此MasterBase<ClientA>
不会从MasterBase<ClientBase>
继承