【问题标题】:Static Members of an Instance Class实例类的静态成员
【发布时间】:2009-05-05 19:32:45
【问题描述】:

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

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

【问题讨论】:

    标签: c# static


    【解决方案1】:

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

    不要将静态变量视为在实例之间共享 - 将它们视为属于 type 而不是任何特定实例。当您有时从不创建任何个实例时,这使您更容易理解事情是如何工作的。

    例如:

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

    周围没有“共享”Test.x 的实例 - 但没关系,因为它与 Test 类型相关联,而不是与Test实例 相关联。

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

    【讨论】:

    • 我倾向于将其视为“与类型相关的在所有实例之间共享”。
    • @Joel:但这是否仍然给人一种错误的感觉,即实例与它有任何关系?您可以同样有效地争辩说 Test.x 在“字符串”的所有实例之间也是共享的 :)
    • 我倾向于认为除了类型名称和访问修饰符处理之外,静态成员与实例没有任何关系,所以我支持 Jon 而不是 Joel。
    猜你喜欢
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 2012-07-02
    • 1970-01-01
    • 2016-06-24
    • 2019-07-13
    • 1970-01-01
    相关资源
    最近更新 更多