我试图在C#中设计父/子定义,但收到一些编译错误,这对我来说并不清楚:
namespace TestProject1
{
public abstract class BaseElement
{
}
public abstract class Child<T> : BaseElement
{
public BaseElement Parent { get; set; }
}
public abstract class Parent<T> : BaseElement
{
public IQueryable<BaseElement> Children { get; set; }
}
public abstract class ParentChild<TParent, TChild> : BaseElement
where TParent : Parent<BaseElement>
where TChild : Child<BaseElement>
{
public void AddChild(TChild child)
{
child.Parent = this;
}
}
public class Root : Parent<Trunk>
{
}
public class Trunk : ParentChild<Root, Branch>
{
}
public class Branch : ParentChild<Trunk, Leaf>
{
}
public class Leaf : Child<Branch>
{
}
}
其中一个编译错误在行公共类Trunk :
中错误CS0311类型
TestProject1.Root
不能用作类型 泛型类型或方法中的参数TParent
ParentChild<TParent, TChild>
。没有隐含的参考 从TestProject1.Root
转换为TestProject1.Parent<TestProject1.BaseElement>
。
但实际上有一条从Root
到Parent<BaseElement>
的路径,Root
继承自Parent<Trunk>
而Trunk
是BaseElement
,原因是BaseElements
ParentChild
继承自Branch
的事实,Trunk
是BaseElement的直接继承者。
其他编译错误类似,但适用于Trunk
中的Leaf
类型以及Branch
的{{1}}和ORDER
参数。
答案 0 :(得分:1)
这不是来自>seqefsub(tmp, min.support=2, constraint = seqeconstraint(window.size = 2))
Subsequence Support Count
1 (A) 1.0000000 3
2 (B) 1.0000000 3
3 (C) 1.0000000 3
4 (A)-(B) 0.6666667 2
5 (A)-(C) 0.6666667 2
Computed on 3 event sequences
Constraint Value
window.size 2
count.method COBJ
的继承。如果这些类都不是从BaseElement
派生的,那么你会遇到同样的问题。 BaseElement
的类型定义取决于Root
。 Trunk
的类型定义取决于Trunk
。你不能像C#中的泛型一样具有循环依赖。实际上,您正在尝试将Root定义为Root
,因此Root派生自Root,这是一个问题。