장면 그래프를 구성하고 싶습니다. 나는 일반 클래스 SceneNode에 있습니다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를 갖게 될 것입니다 (그래서 그것은 headed list와 같습니다). 그리고 나는 들판을 숨기는 것에 동의합니다. 나는 그것들을 기본 구조체에서만 열어 둔다. – lazychaser