c#中是否存在一个关键字,可以使局部变量在多个调用中持续存在?

本文关键字:存在 调用 局部变量 可以使 关键字 是否 一个 | 更新日期: 2023-09-27 18:17:57

也就是说,在C语言中,可以定义如下函数:

func(){   
  static int foo = 1;   
  foo++;  
  return foo;  
}

,每次调用它都会返回一个更高的数字。c#中有类似的关键字吗?

c#中是否存在一个关键字,可以使局部变量在多个调用中持续存在?

不,c#中没有这样的东西。你想要在多个方法调用中持久化的所有状态都必须在字段中,实例或静态。

除了…如果你在lambda表达式或类似的东西中捕获变量。例如:

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()一次,但是这个"局部变量"肯定比你预期的寿命要长得多…

那可能对你有用,也可能没用——这取决于你在做什么。但大多数情况下,对象的状态在正常字段中是有意义的。

您必须为方法所在的类创建一个静态或实例成员变量

public class Foo
{
    static int _bar = 1;
    public int Bar()
    {
        return ++_bar;
    }
}