我想在我的通用界面的this
限制中使用typeof(this)
关键字或where
之类的内容,但显然这不正确(既不编译)。有一种光滑的方式可以做到这一点,我不知道吗?
interface IParent<TChild> where TChild : IChildOf<typeof(this)>
{
void AddRange(TChild children){}
}
interface IChildOf<TParent> : IDisposable
{
TParent Parent { get; }
}
或者我必须这样做
interface IParent<TChild, T2> where TChild : IChildOf<T2>
并且知道T2将是实现接口的类吗?
答案 0 :(得分:6)
这里可以使用奇怪的重复通用模式:
interface IParent<TChild, TParent>
where TChild : IChildOf<TParent>
where TParent : IParent<TChild, TParent>
{
void AddRange(TChild children);
}
答案 1 :(得分:1)
我认为你唯一的选择是:
interface IParent<TChild, TParent> where TChild : IChildOf<TParent>
{
void AddRange(TChild children);
}
您只能在通用接口的类型约束中使用类型参数或已知的编译时类型,因此这是您可以做的最好的。
答案 2 :(得分:0)
似乎你想构建一个树结构,其中每个节点都有多个子节点。你可以这样做:
interface INode
{
List<INode> Children { get; }
void AddRange(IEnumerable<INode> children);
}
class Node : INode
{
List<INode> Children { get; private set; }
void AddRange(IEnumerable<INode> children)
{
Children.AddRange(children);
}
}