静态新手:静态类/方法中的非静态变量是否隐含静态?

时间:2011-12-15 22:16:37

标签: c#

当一个网站同时遇到具有非静态变量的相同静态方法时,即使没有声明为静态,这些变量是静态的吗?我会这么认为,但我不得不问。

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

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;
    }
}

问题摘要:

  1. 未声明为静态的静态方法变量是否隐含静态,即静态代码的同时执行会相互影响?
  2. 或者这些变量各有各​​自的存储?
  3. 并且静态方法中的Thread.Sleep(5000)是否会停止所有用户的执行?

1 个答案:

答案 0 :(得分:5)

您正在显示本地变量。所以不,那些不是静态变量。每次调用该方法时(包括它是否以递归方式调用),您都会获得一组新的变量。不同的线程将共享这些变量。请注意,这与作为静态类的类无关。您需要区分:

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

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