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