Хотя я не думаю, что полностью понял ваш вопрос, вы можете увидеть здесь несколько способов заставить переменную «сохраняться» вне метода:
Статические переменные
Статические переменные - это что-то вроде глобальной переменной.Вы можете видеть их через во всей программе , если вы установите их как общедоступные (если вы установите их как внутренние, они разные).
Статическая переменная может быть определена как:
class MyClass
{
static int MyVariable = 4;
}
....somewhere...
void MyMethod()
{
MyClass.MyVariable = 234;
}
Как видите, вы можете получить к ним доступ в любом месте.
Переменные в куче
Если вы создаете объект с new оператор, если вы сохраняете ссылку на этот объект, все изменения, которые вы делаете для него, отражаются на всех ссылках на этот объект, которые у вас есть.Например,
class MyClass
{
int X;
}
static class Program
{
static void Main(string args[])
{
MyClass a = new MyClass();
a.X = 40;
Method1(a);
Method2(a);
Console.WriteLine(a.X.ToString()); // This will print 32
}
static void Method1(MyClass c)
{
c.X = 10;
}
static void Method2(MyClass c)
{
c.X = 32;
}
}
Вы даже можете использовать refs для редактирования переменных внутри метода
По сути, вы неправильно поняли концепцию "scope", потому что вы спрашиваете "какие типы переменных существуют "(глобальные / статические / локальные и т. д.).Что вы хотели бы знать о области видимости, так это: локальная переменная существует только в пределах {}, где она определена.
Надеюсь, это даст вам некоторые рекомендации.Ответ определенно не полный, но он может дать вам представление.
Попытайтесь быть более конкретным, чтобы я мог изменить свой ответ.
Ответ для редактирования 1:
Нет, вы не можете изменить переменную так, как хотите, вы должны добавить ее к классу (в данном случае - Программе), попробуйте добавить:
class Program
{
static int number;
....
}
Очевидно, что вы должны удалить однувнутри метода Main.
Также обратите внимание, что int нельзя изменить (кроме как без ссылки) внутри функции, если вы передаете их как параметры, потому что они копируются.
Причина довольнопросто: ссылка на экземпляр класса имеет (по крайней мере) тот же размер, что и int (если мы говорим о 32/64-битных системах), поэтому для его копирования или ссылки на него требуется одно и то же время.
Если хотите, вы можете вернуть значение из метода после того, как вы выполнили вычисления, например:
int x = 3;
x = DoSomethingWithX(x);
int DoSomethingWithX(int x)
{
x += 30;
}