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

Zac*_*ott 2 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题摘要:

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

Jon*_*eet 5

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

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

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