我有一個父類容器可能含有任何種類的節點,這裏節點是一個泛型類的特定於母公司的子類,像這樣:通用子C#泛型父
public class ContainerBase<NodeType, ObjectType>
where NodeType : NodeBase<ObjectType> where ObjectType : ObjectBase {
}
public abstract class NodeBase<T> where T : ObjectBase {
ContainerBase<NodeBase<T>, T> container;
public NodeBase(ContainerBase<NodeBase<T>, T> owner) {
container = owner;
}
}
什麼我想要做的是創造簡單實現標準的對象類型的具體子類:
public class ContainerNormal : ContainerBase<NodeNormal, ObjectNormal> {
}
public class NodeNormal : NodeBase<ObjectNormal> {
//This doesn't work
public NodeNormal(ContainerNormal owner) : base(owner) { }
}
我有點明白,爲什麼在調用基類的構造不起作用。它試圖將ContainerNormal
轉換爲ContainerBase<NodeBase<ObjectNormal>, ObjectNormal>
,這實際上並不奏效。
那麼我錯過了什麼樣的設計模式來使這項工作正確?或者我只需要在構造函數中輸入ContainerBase<NodeBase<ObjectNormal>,ObjectNormal>
即使它不一定是ContainerNormal
對象?
這看起來像它可能實際上工作,雖然它最終會混亂命名空間有點... – 2011-03-09 19:54:11
經過檢查,它似乎有同樣的問題,因爲可以Genger的答案,因爲試圖從ContainerNormal獲得NodeNormal將改爲返回節點,這幾乎是相同的,但不完全相同。 –
2011-03-09 20:00:34