Ответ 1
Нет, в этом случае С# не имеет той же семантики, что и Java. Вы можете сделать TestVariable
const
, static
или передать экземпляр Outer
в конструктор Inner
, как вы уже отметили.
как реализовать внутренние внешние классы в С#
У меня есть два вложенных класса
как
class Outer
{
int TestVariable = 0;
class Inner
{
int InnerTestVariable = TestVariable // Need to access the variable "TestVariable" here
}
}
Показывает ошибку при компиляции.
Его можно решить с помощью
1) Создание TestVariable как статического
2) Передача экземпляра класса Outer классу Inner
но в java нет необходимости создавать экземпляр или статический.
Можно ли использовать ту же функциональность и на С#?
Нет, в этом случае С# не имеет той же семантики, что и Java. Вы можете сделать TestVariable
const
, static
или передать экземпляр Outer
в конструктор Inner
, как вы уже отметили.
Вы можете создать экземпляр внутреннего класса, даже не имея экземпляр внешнего класса, что должно произойти в том случае, если вы думаете? Вот почему вы не можете его использовать
Outer.Inner iner = new Outer.Inner(); // what will be InnerTestVariable value in this case? There is no instance of Outer class, and TestVariable can exist only in instance of Outer
Вот один из способов сделать это
class Outer
{
internal int TestVariable=0;
internal class Inner
{
public Inner(int testVariable)
{
InnerTestVariable = testVariable;
}
int InnerTestVariable; //Need to access the variabe "TestVariable" here
}
internal Inner CreateInner()
{
return new Inner(TestVariable);
}
}
Сделать переменную internal
или перейти к внутренней constructor
Короткий ответ: Нет,
Вам нужно как-то вставить TestVariable в свой Внутренний класс. Создание testVariable может привести к нежелательному поведению. Моим предложением было бы ввести его через конструктор.