Получить ссылку на объект, список которого содержится в объекте - PullRequest
0 голосов
/ 12 августа 2011

Учитывая следующий случай в 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 выяснить, в каком списке он содержится и в каком объектеэтот список принадлежит?Другими словами, может ли Foo получить ссылку на Foo2, или мне нужно добавить явную обратную ссылку в Foo - указывающую на Foo2 - как я это делал?

Ответы [ 3 ]

3 голосов
/ 12 августа 2011

Нет, нет встроенного способа.Экземпляры Foo знают только о себе, общедоступном интерфейсе своих членов и общедоступном / защищенном интерфейсе своего базового класса, если они у него есть.

Если вы дадите немного больше контекста о том, что вы пытаетесьЯ могу предложить вам альтернативное решение.

0 голосов
/ 12 августа 2011

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 голосов
/ 12 августа 2011

Нет; это по своей сути невозможно.

Что если вы поместите один и тот же объект в два списка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...