代码之家  ›  专栏  ›  技术社区  ›  Jason Wicker

实例类的静态成员

  •  8
  • Jason Wicker  · 技术社区  · 17 年前

    实例类的静态成员的寿命是否与实例本身的寿命相同,还是静态成员在应用程序的整个生命周期内都存在?

    例如,假设我有一个哈希表作为静态属性。如果我从一个“实例”向它添加了项,它们是否可以从另一个“实例”中使用?

    1 回复  |  直到 17 年前
        1
  •  17
  •   Jon Skeet    17 年前

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

    不要认为静态变量是在实例之间共享的-认为它们属于 类型 而不是任何特定的实例。这使得你更容易理解事情是如何运作的,而有时你从来没有创造过。 任何 实例。

    例如:

    class Test
    {
        static int x = 0;
    
        static void Main()
        {
            x = 10;
            Console.WriteLine(x);
        }
    }
    

    周围没有可“共享”的实例 Test.x -但没关系,因为它与类型有关 Test 而不是 实例 属于 试验 .

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