作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
所以,我正在尝试建立这样的父/子类关系:
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;
}
}
但是,这是一个编译错误。因此,我的第二个想法是使用 where
声明 SetParent
方法。但问题是我不知道将 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;
}
}
最佳答案
这似乎是可以编译的,尽管它相当笨拙:
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;
}
}
此解决方案使用递归绑定(bind)类型参数,近似“ self 类型”。
我有义务链接到 Eric Lippert 关于此模式的文章:Curiouser and curiouser
关于c# - 父/子泛型关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16847952/
我是一名优秀的程序员,十分优秀!