Решение - Can not access a nonstatic member of outer type via nested type

10:03:2013 Рі.

В заметке рассматривается способ решения ошибки компиляции can not access a nonstatic member of outer type via nested type.

Такую ошибку встречают обычно начинающие разработчики, или разработчики Java, которые пытаются написать свой код на .NET. Ошибка эта связана с использованием вложенных классов.

Рассмотрим пример:

class  A
{
   string stringA = "any string";
  
   class  B
   {
       public void ChangeStringA(string newString)
       {
          stringA = newString;
       }
   }
}

При попытке компиляции возникнет ошибка can not access a nonstatic member of outer type via nested type. Дело в том, что в отличии от Java вложенные классы не могут иметь доступа к элементам родительского и являются обособленными.

Для того, чтобы решить данную проблему, можно предусмотреть передачу ссылки на экземпляр класса A в конструктор класса B, чтобы иметь возможность менять любые объекты класса A внутри класса В.

classclassA A
{
   string stringA = "any string";
  
   class classAB
   {
       A parentInstance;

       public  B (A instance)
       {
          parentInstance = instance;

       }   
  
       public void ChangeStringA(string newString)
       {
          parentInstance.stringA = newString;
       }
   }
}

В данной модификации пример будет работать - доступ к переменной класса А будет осуществляться через переменную родительсткого класса, которая была получена как ссылка.

Пример работает везде на платформе .NET - C#, VB.NET, Mono .NET.

 

Добавить комментарий



Обновить

« Решение:Парсинг int? или int, допускающий нулевые значения (nullable) из строки C#   Замена выделенного текста в TextBox C# Windows Forms »
← Раньше

Фотоальбом

fotic.jpg

Облако Тегов