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

发布于 2024-10-09 01:17:42 字数 145 浏览 3 评论 0原文

静态方法中可以有静态变量吗?该变量的值会在对该方法的所有调用中保留吗?

例如。

public static void MyMethod()
{
    static int x = 0;
    x++;
}

Can you have a static variable in a static method? Would the value of this variable be preserved across all calls to the method?

eg.

public static void MyMethod()
{
    static int x = 0;
    x++;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

╭⌒浅淡时光〆 2024-10-16 01:17:42

不可以。

你不能有局部静态变量。

来自 MSDN

C# 不支持静态局部变量(在方法作用域中声明的变量)。

此处

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

正如您所看到的,局部变量没有被提及。


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

public class MyClass
{
    private static int MyVariable = 10;

    public static void MyMethod()
    {
        MyVariable++;
    }
}

No.

You can't have local static variables.

From MSDN:

C# does not support static local variables (variables that are declared in method scope).

And here:

The static modifier can be used with classes, fields, methods, properties, operators, events, and constructors, but it cannot be used with indexers, destructors, or types other than classes.

As you can see, local variables are not mentioned.


You can, however use a static field:

public class MyClass
{
    private static int MyVariable = 10;

    public static void MyMethod()
    {
        MyVariable++;
    }
}
慢慢从新开始 2024-10-16 01:17:42

不,但你可以:

private static int x = 0;
public static void MyMethod()
{
     x++;
} 

No, but you could have:

private static int x = 0;
public static void MyMethod()
{
     x++;
} 
等数载,海棠开 2024-10-16 01:17:42

这是一种实现您想要做的事情的黑客方法。将 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();
}

Here is sort of a hackish way to accomplish what you're trying to do. Turn MyMethod into an Action that creates a closure on x. The variable x will only be visible to the innermost delegate, and behaves like a static variable. If anyone has any suggestions for improving this pattern let me know.

public static readonly Action MyMethod = new Func<Action>(delegate ()
{
    var x = 0;
    return delegate () { x++; };
}).Invoke();

//example usage:
public void Init() {
    MyMethod();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文