В заметке рассматривается способ решения ошибки компиляции 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.
|