我想組織一個場景圖。 我一般類場景節點:C#訪問受保護的領域
public class SceneNode
{
protected SceneNode prev, next;
protected SceneNodeContainer parent;
public SceneNode Parent { get { return parent; } }
public SceneNode PreviousNode { get { return prev; } }
public SceneNode NextNode { get { return next; } }
}
我也有類SceneNodeContainer,它是這樣的:
public class SceneNodeContainer : SceneNode
{
SceneNode firstChild, lastChild;
public SceneNode FirstChild { get { return firstChild; } }
public SceneNode LastChild { get { return lastChild; } }
public void Add(SceneNode node)
{
Debug.Assert(node != null);
Debug.Assert(node.parent == null);
node.parent = this;
node.prev = lastChild;
node.next = null;
if (lastChild == null)
{
lastChild = node;
firstChild = lastChild;
}
else
{
lastChild.next = node;
lastChild = node;
}
}
public void Remove(SceneNode node)
{
Debug.Assert(node != null);
Debug.Assert(node.parent == this);
//unlink node
if (node.next != null)
node.next.prev = node.prev;
if (node.prev != null)
node.prev.next = node.next;
if (node == firstChild)
firstChild = node.next;
if (node == lastChild)
lastChild = node.prev;
node.parent = null;
node.next = null;
node.prev = null;
}
}
智能感知說node.parent和其他受保護領域無法從SceneNodeContainer訪問。我該如何克服這一點?
「我幾乎在所有情況下都使非常量字段保密。」 - 你認爲這是一個糟糕的設計或個人喜好的症狀嗎? –
@威廉:設計。字段是一個實現細節,不應該是公開的API的一部分 –
好吧,因爲它通常發生在我身上,解決方案出現在發佈這個問題後。 SceneNode類現在將具有AddAfter和AddBefore方法,而SceneNodeContainer將有一個空的SceneNode作爲第一個子元素(所以它就像頭部列表)。我同意隱藏領域。我只在基本結構中打開它們。 – lazychaser