在静态方法中可以有静态变量吗?这个变量的值是否会在该方法的所有调用中保留?
例如:
public static void MyMethod()
{
static int x = 0;
x++;
}
在静态方法中可以有静态变量吗?这个变量的值是否会在该方法的所有调用中保留?
例如:
public static void MyMethod()
{
static int x = 0;
x++;
}
MyVariable
仅在MyMethod
中使用,那么它应该放在MyMethod
中,而不是暴露给类的其余部分。 - AustinWBryanstrtok
函数成为可能的原因。从POSIX strtok页面:此函数使用静态存储来在调用之间跟踪当前字符串位置。我在C++中编写了一个变体,它忽略了空记录并接受任何可以由C++ String类表示的分隔符。了解这些东西的工作原理应该使其能够在任何语言中复制,但遗憾的是,这是C#的一个弱点。 - Joel Trauger不可以,但你可以有:
private static int x = 0;
public static void MyMethod()
{
x++;
}
[ThreadStatic]private static int x = 0;
吧? - Chris F Carroll这里有一种巧妙的方法可以实现你想要做的事情。将MyMethod
转换为一个创建在x
上的闭包的Action
。变量x
只会对最内层的委托可见,并且表现得像静态变量。如果有人有改进这个模式的建议,请告诉我。
public static readonly Action MyMethod = new Func<Action>(delegate ()
{
var x = 0;
return delegate () { x++; };
}).Invoke();
//example usage:
public void Init() {
MyMethod();
}
Shared
局部变量而问这个问题吗?无论如何,CLR本身并不支持这种功能,因此VB.NET必须使用一些幕后技巧来创建这种效果。 - Cody Gray