2011-08-11 6 views
0

에 포함되어 그 목록을 객체 참조를 가져옵니다 :C#에서 다음과 같은 경우 고려 객체가

class Foo 
{ 
    public Foo() { }   
} 

class Foo2 
{ 
    private List<Foo> m_List = new List<Foo>();  
    public Foo2() { m_List.Add(new Foo); }  
} 

Foo2 fooInstance = new Foo2(); 

FOO2는 푸를 포함하는 목록을 소유를 - 푸 알아낼에 대한 기본 방법이 있습니다 어떤 목록에 포함되어 있으며 어떤 목록에 속한 개체입니까? 다시 말해 Foo는 Foo2에 대한 참조를 얻을 수 있습니까? 아니면 Foo2에 대한 명시적인 역 참조를 추가해야합니까?

답변

0

Foo은 어떻게 든 지정하지 않으면 목록에 포함되어 있다는 것을 알지 못합니다. 결국 목록은 메모리에있는 위치에 대한 참조 집합입니다. 포인터에서 포인터를 포함하는 관계가 없습니다.

class Foo 
{ 
    public Foo2 Parent { get; protected set; } 

    public Foo(Foo2 parent) 
    { 
     Parent = parent; 
    } 
} 

class Foo2 
{ 
     public Foo2() 
     { 
      List<Foo> x = new List<Foo> 
      { 
       new Foo(this) 
      }; 
     } 
} 
0

아니오; 그건 본질적으로 불가능합니다.

같은 개체를 두 목록에 넣으면 어떨까요?

+0

그런 다음 하나의 참조 대신 반복 가능한 개체 목록을 기대합니다. 그러나 나는 이것이 가능하지 않다는 것을 즉각 받아 들일 것입니다. 그것은 제가 직면했던 것들을 "잘 모른다면, 결코 알지 못할 것입니다"라고 말한 것 중 하나입니다. – Drakestar

3

아니요, 기본 제공 방법이 없습니다. Foo의 인스턴스는 자신, 멤버의 공용 인터페이스 및 기본 클래스의 공용/보호 된 인터페이스 (있는 경우) 만 알고 있습니다.

당신이하려는 일에 대해 좀 더 많은 맥락을 제시하면 나는 대체 솔루션을 제공 할 수 있습니다.

+0

오브젝트가 오브젝트 목록을 소유하고있는 간단한 그래프를 상상해보십시오. 각 오브젝트는 오브젝트 목록 등을 소유하고 있습니다. pp ... 저는 그래프를 거꾸로 탐색하는 아주 쉬운 방법을 찾고있었습니다. 나는 이미 전통적인 방식으로 이것을 잘 수행하고있다. – Drakestar

+0

예를 들어 컨트롤에서 .parent를 볼 수 있으므로 소유자 트리를 재귀 적으로 볼 수 있습니다. – deepee1

관련 문제