实例类的静态成员是否只与实例本身一样长,或者静态成员是否在应用程序的整个生命周期中都存在?
例如,假设我有一个Hashtable作为静态属性。如果我从一个“实例”添加项目,它们是否可以从另一个“实例”获得?
答案 0 :(得分:17)
他们生活在AppDomain
的整个生命周期中。 (对于Windows应用程序,这通常是过程的生命周期;但可能不是这样,具体取决于您正在做什么。AppDomains
会在ASP.NET中定期回收。)
不要将静态变量视为在实例之间共享 - 将它们视为属于类型而不是任何特定实例。这有助于您在有时从不创建任何实例时更容易理解事物是如何工作的。
例如:
class Test
{
static int x = 0;
static void Main()
{
x = 10;
Console.WriteLine(x);
}
}
没有“共享”Test.x
的实例 - 但这没关系,因为它与Test
类型相关联,而不是与Test
的实例相关联
你可以说这是一个非常微妙的区别,但它是我发现有用的。