实例类的静态成员只在实例本身存在期间存在,还是静态成员将在整个应用程序生命周期内存在?
例如,假设我有一个哈希表作为静态属性。如果我从一个“实例”添加项目,它们是否可以从另一个“实例”中访问?
它们在AppDomain
的整个生命周期中存在。(对于Windows应用程序,这通常是进程的生命周期;但具体取决于你正在做什么。在ASP.NET中,AppDomains
会定期回收。)
不要认为静态变量是在实例之间共享的 - 而是属于类型而不是任何特定实例。这使得当你有时候永远不创建任何实例时更容易理解事情的工作原理。
例如:
class Test
{
static int x = 0;
static void Main()
{
x = 10;
Console.WriteLine(x);
}
}
周围没有实例可以“共享”Test.x
——但这没关系,因为它与类型Test
相关联,而不是与Test
的实例相关联。
你可以认为这是一个非常微妙的区别,但我发现这个区别很有用。