我想组织一个场景图。 我一般类场景节点: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