实例类的静态成员

Jas*_*ker 8 c# static

实例类的静态成员是否只与实例本身一样长,或静态成员是否在应用程序的整个生命周期中存在?

例如,假设我有一个Hashtable作为静态属性.如果我从一个"实例"添加项目,它们是否可以从另一个"实例"获得?

Jon*_*eet 17

他们生活在整个一生中AppDomain.(对于Windows应用程序,这通常是过程的生命周期;但可能不是,具体取决于您正在做什么.AppDomains在ASP.NET中定期回收.)

不要将静态变量视为在实例之间共享 - 将它们视为属于类型而不是任何特定实例.这有助于您在有时从不创建任何实例时更容易理解事物是如何工作的.

例如:

class Test
{
    static int x = 0;

    static void Main()
    {
        x = 10;
        Console.WriteLine(x);
    }
}
Run Code Online (Sandbox Code Playgroud)

周围有"共享"没有实例Test.x-不过没关系,因为它与类型相关联Test,而不是与实例Test.

你可以说这是一个非常微妙的区别,但它是我发现有用的.

  • 我倾向于认为静态成员对类型名称和访问修饰符处理以外的实例没有任何关系,所以我在这个问题上与Jon而不是Joel. (5认同)
  • @Joel:但是,这是不是仍然错误地认为实例与它有关?您可以同样有效地争辩说Test.x在所有"string"实例之间共享:) (2认同)