c#中是否存在一个关键字,可以使局部变量在多个调用中持续存在?
本文关键字:存在 调用 局部变量 可以使 关键字 是否 一个 | 更新日期: 2023-09-27 18:17:57
也就是说,在C语言中,可以定义如下函数:
func(){
static int foo = 1;
foo++;
return foo;
}
,每次调用它都会返回一个更高的数字。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;
}
}