Jay*_*Jay 7 c# generics parent-child c#-4.0
所以,我正在尝试这样的父/子类关系:
class ParentClass<C, T> where C : ChildClass<T>
{
public void AddChild(C child)
{
child.SetParent(this); //Argument 1: cannot convert from 'ParentClass<C,T>' to 'ParentClass<ChildClass<T>,T>'
}
}
class ChildClass<T>
{
ParentClass<ChildClass<T>, T> myParent;
public void SetParent(ParentClass<ChildClass<T>, T> parent)
{
myParent = parent;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这是一个编译错误.所以,我的第二个想法是SetParent用a 声明方法where.但问题是我不知道什么类型声明myParent(我知道类型,我只是不知道如何声明它.)
class ParentClass<C, T> where C : ChildClass<T>
{
public void AddChild(C child)
{
child.SetParent(this);
}
}
class ChildClass<T>
{
var myParent; //What should I declare this as?
public void SetParent<K>(ParentClass<K,T> parent) where K : ChildClass<T>
{
myParent = parent;
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎可以编译,尽管它相当令人头疼:
class ParentClass<C, T> where C : ChildClass<C, T>
{
public void AddChild(C child)
{
child.SetParent(this);
}
}
class ChildClass<C, T> where C : ChildClass<C, T>
{
ParentClass<C, T> myParent;
public void SetParent(ParentClass<C, T> parent)
{
myParent = parent;
}
}
Run Code Online (Sandbox Code Playgroud)
该解决方案利用递归绑定类型参数,该参数近似于“自身类型”。
我有义务链接到 Eric Lippert 关于此模式的文章:越来越好奇