2011-08-11 102 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找出任何内置的方式它包含哪个列表以及该列表属于哪个对象?换句话说,Foo可以获得对Foo2的引用,还是我必须在Foo中添加一个明确的向后引用 - 指向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

相关问题