C#中是否存在可以使局部变量在多个调用中保持不变的关键字?

时间:2011-12-14 21:43:43

标签: c# c#-4.0

也就是说,在C中,我们可以定义一个函数:

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

每次调用它时都会返回一个更高的数字。 C#中是否有等效的关键字?

3 个答案:

答案 0 :(得分:17)

不,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()一次,但那个“局部变量”肯定会超出你预期的生命周期......

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

public class Foo
{
    static int _bar = 1;

    public int Bar()
    {
        return ++_bar;
    }
}