C# 静态新手:静态类/方法中的非静态变量是静态的吗?

C# 静态新手:静态类/方法中的非静态变量是静态的吗?,c#,C#,当一个网站同时点击具有非静态变量的同一个静态方法时,即使没有声明为静态变量,这些变量也是静态的吗?我想是的,但我不得不问 另一种选择是相同代码的不同执行具有不同的内部变量,因此此代码不会产生意外的字符串长度,例如: public static class MyClass { public static int getResult(string ext) { int length = est.length; // One place in RAM or mult

当一个网站同时点击具有非静态变量的同一个静态方法时,即使没有声明为静态变量,这些变量也是静态的吗?我想是的,但我不得不问

另一种选择是相同代码的不同执行具有不同的内部变量,因此此代码不会产生意外的字符串长度,例如:

public static class MyClass 
{
    public static int getResult(string ext)
    {
        int length = est.length;  // One place in RAM or multiple?
        Thread.Sleep(5000);       // Does this stop program execution for others?
        return length;
    }
}
问题摘要:

  • 未声明为static的静态方法变量是否意味着static,即同时执行静态代码会相互影响
  • 或者这些变量各自有自己的存储空间吗
  • 静态方法中的Thread.Sleep(5000)会停止所有用户的执行吗
  • 您正在显示局部变量。所以不,这些不是静态变量。每次调用该方法(包括它是否以递归方式调用自己)时,都会得到一组新的变量。不同的线程将不会共享这些变量。请注意,这与类是静态类无关。您需要区分:

    • 局部变量,属于声明它们的方法
    • 实例变量,与声明类型的特定实例关联
    • 静态变量,与声明类型本身关联(而不是与任何特定实例关联)

    Thread.Sleep
    仅使当前线程睡眠-如果您的应用程序有多个线程,其他线程仍可以执行。

    TYVM。我使用LinqPad创建了一个示例来证明这一点。我有三个线程在向上计数,向下计数,不计数,只是报告变量内容。正如你所描述的那样工作。