Существует ли ключевое слово в С#, которое заставляет локальные переменные сохраняться при нескольких вызовах?
То есть, в C, мы можем определить такую функцию, как:
func(){
static int foo = 1;
foo++;
return foo;
}
и он будет возвращать большее число при каждом вызове.
Есть ли эквивалентное ключевое слово в С#?
Ответ 1
Нет, в С# нет такой вещи. Все состояния, которые вы хотите сохранить в нескольких вызовах методов, должны быть в полях, будь то экземпляры или статические.
Кроме того, если вы захватили переменную в выражении лямбда или что-то в этом роде. Например:
public Func<int> GetCounter()
{
int count = 0;
return () => count++;
}
Теперь вы можете использовать:
Func<int> counter = GetCounter();
Console.WriteLine(counter()); // Prints 0
Console.WriteLine(counter()); // Prints 1
Console.WriteLine(counter()); // Prints 2
Console.WriteLine(counter()); // Prints 3
Теперь, конечно, вы вызываете только GetCounter() один раз, но эта "локальная переменная", безусловно, живет намного дальше, чем вы ожидали...
Это может или не может быть вам полезно - это зависит от того, что вы делаете. Но большую часть времени на самом деле имеет смысл, чтобы объект имел свое состояние в нормальных полях.
Ответ 2
Вам нужно будет создать переменную класса static или instance класса, в котором находится метод.
Ответ 3
public class Foo
{
static int _bar = 1;
public int Bar()
{
return ++_bar;
}
}