我試圖設計在C#中的父母/子女的定義,但收到一些編輯錯誤,這是不明確的對我說: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>
{
}
}
一個編譯錯誤的是線公共類中繼線:
錯誤CS0311類型
TestProject1.Root
不能被用作類型 參數TParent
在通用類型或方法ParentChild<TParent, TChild>
。沒有隱含的參考 轉換從TestProject1.Root
到TestProject1.Parent<TestProject1.BaseElement>
。
但實際上是由於從Root
到Parent<BaseElement>
作爲Root
繼承Parent<Trunk>
和Trunk
是BaseElement
的路徑,從ParentChild
BaseElements
繼承,這是從BaseElement的直接繼任者。
其他的編譯錯誤是相似的,但對於Trunk
的Branch
類型和Branch
的Trunk
和Leaf
參數。
C#不支持方差類。因此,無論「Trunk」和「BaseElement」之間的關係如何,「Parent」不是「Parent 」。 –
PetSerAl