Простой вопрос C #: классы вложенности, доступность - PullRequest
1 голос
/ 08 августа 2009

Я знаю, что это, вероятно, просто, но не могу понять, возможно ли это сделать.

У меня есть следующий код:

public class A {    
thisMethod();  

 public class B {    
  someMethod();    
   }   
}


public class C {    
A myA = new A();    
A.B.someMethod();    
}

Почему я не могу получить доступ к B, если я уже создал A?

Заранее благодарю за помощь!

Ответы [ 2 ]

5 голосов
/ 08 августа 2009

Вам нужен экземпляр A.B для вызова метода экземпляра на A.B:

A.B foo = new A.B();
foo.SomeMethod();

В вашем примере вы даже не пытались использовать созданный вами новый экземпляр.

Если вы пришли из Java-фона, возможно, стоит указать, что вложенные классы в C # похожи на статические вложенные классы в Java. Не существует неявной ссылки от экземпляра вложенного класса на экземпляр класса контейнера. (Доступ также осуществляется наоборот - в Java внешний класс имеет доступ к закрытым членам своего вложенного класса; в C # вложенный класс имеет доступ к закрытым членам своего внешнего класса.)

0 голосов
/ 08 августа 2009

Вы пытаетесь получить к нему доступ, как если бы это был статический метод или свойство класса A с именем "B". Вам все еще нужно создать его экземпляр - это объявление класса. Я думаю, что вы ищете:

public class A {    

public A()
{
   myB = new B();
}

thisMethod();  
public B myB
{
 get; set;
}

 public class B {    
  someMethod();    
   }   
}


public class C {    
A myA = new A();    
A.myB.someMethod();    
}

Просто чтобы заметить, не рекомендуется публично раскрывать вложенные классы.

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