получить доступ к значению свойства одного класса из другого внутреннего класса в C # - PullRequest
0 голосов
/ 14 апреля 2010

как получить доступ к значению свойства из внутреннего класса, см. Ниже?

namespace N1
{
    public class ClassA
    {
       string var1 = null;
       private ClassB  b;
       public ClassA()
       {
          var1 = "one";
          b = new ClassB();
       }
       //property 
       public string Var1
       {
          get{ return var1; }
       }
}

namespace N1
{
   internal class ClassB  
   {
     private void method()
     {
      // I need to access the value of Var1( property) from here, how to do this?
     }
   }
}

Ответы [ 4 ]

1 голос
/ 14 апреля 2010

Передайте экземпляр ClassA в конструктор ClassB:

namespace N1
{
   internal class ClassB  
   {
     private ClassA _classAInstance;

     public void ClassB(ClassA classAInstance)
     {
         _classAInstance = classAInstance;
     }

     private void method()
     {
       // You can access _classAInstance properties here
     }

   }
}

Обновление: я пропустил, что экземпляр ClassB b был закрытым членом ClassA. Используя мой предыдущий ответ, вы можете просто создать экземпляр b в конструкторе ClassA:

   public ClassA()
   {
      var1 = "one";
      b = new ClassB(this);
   }
0 голосов
/ 14 апреля 2010

Вам нужна ссылка на экземпляр класса А.

Так что либо измените конструктор класса B, чтобы принять ссылку на класс A

namespace N1
{
    public class ClassA
    {
        string var1 = null;
        private ClassB b;
        public ClassA()
        {
            var1 = "one";
            b = new ClassB(this);
        }
        //property 
        public string Var1
        {
            get { return var1; }
        }
    }
}

namespace N1
{
   internal class ClassB  
   {
       ClassA classA;
       public ClassB(ClassA classARef)
       {
           classA = classARef;
       }

     private void method()
     {
      // I need to access the value of Var1( property) from here, how to do this?
         string myString = classA.Var1;
     }
   }
}

или заставить приватный метод ClassB () взять строку? private void method(string classAVar1)

или сделать ClassA статичным (ха-ха)

0 голосов
/ 14 апреля 2010

Ну, есть несколько способов:

  1. Измените модификатор доступа ClassB.Method на public и сделайте так, чтобы он принимал строковый параметр.
  2. Обновите конструктор ClassB, чтобы получить строковый параметр и сохранить его в закрытом поле.
  3. Добавить свойство публичной строки в ClassB.

Создание класса internal означает, что класс доступен только для файлов в одной сборке.

0 голосов
/ 14 апреля 2010

Вы не можете. Измените модификаторы доступа класса A или B. Цель внутреннего класса состоит в том, чтобы содержать некоторую реализацию внутренней логики, и если вам нужно получить доступ к полям открытых классов из него, вероятно, что-то не так с дизайном приложения

...