c#:静态方法中的静态变量

Cra*_*ton 27 c# static

你能在静态方法中使用静态变量吗?在对方法的所有调用中是否保留此变量的值?

例如.

public static void MyMethod()
{
    static int x = 0;
    x++;
}
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 28

没有.

您不能拥有本地静态变量.

来自MSDN:

C#不支持静态局部变量(在方法范围内声明的变量).

在这里:

static修饰符可以与类,字段,方法,属性,运算符,事件和构造函数一起使用,但不能与索引器,析构函数或类以外的类型一起使用.

如您所见,提及局部变量.


但是,您可以使用静态字段:

public class MyClass
{
    private static int MyVariable = 10;

    public static void MyMethod()
    {
        MyVariable++;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,如果`MyVariable`仅用于`MyMethod`,它属于`MyMethod`,不会暴露给其他类. (5认同)
  • 这可能是使用 C# 而支持较旧的“C”语言的唯一缺点。C++ 范围较弱,但您可以拥有局部静态变量。这就是使 `strtok` 函数成为可能的原因。来自 POSIX strtok 页面:此函数使用静态存储来跟踪调用之间的当前字符串位置。我用 C++ 编写了它的一个变体,它忽略空记录并接受任何可以由 C++ String 类表示的分隔符。知道这些东西是如何工作的应该使它可以在任何语言中复制,但唉,这是 C# 的一个弱点。 (2认同)
  • @JoelTrauger C++ 究竟如何比 C# 具有更弱的范围规则?据我所知,它们是相同的,只是 C++ 可能有局部静态变量。 (2认同)

Grh*_*rhm 7

不,但你可以:

private static int x = 0;
public static void MyMethod()
{
     x++;
} 
Run Code Online (Sandbox Code Playgroud)