c# - 实例类的静态成员

标签 c# static

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

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

最佳答案

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

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

例如:

class Test
{
    static int x = 0;

    static void Main()
    {
        x = 10;
        Console.WriteLine(x);
    }
}

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

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

关于c# - 实例类的静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/826555/

相关文章:

c# - 为什么协变和逆变不支持值类型

java - 在 Array 与 ArrayList 中转换对象并调用该对象的方法

c# - Microsoft WCF 测试客户端错误

c# - 使用 Microsoft.Office.Interop 向 MS Word 表格添加一行

c# - 如何解决 DbContext 上的此 ASP.NET MVC 数据空构造函数警告?

c - 重构全局到局部。它们是否应该是静态的?

php - PHPUnit 中的模拟对象来模拟静态方法调用?

c# - 将选中的项目从选中列表框中添加或删除到列表框中

c - 为什么 'extern' 的声明不适用于 C 中的静态函数?

c - 为什么不外部链接到静态变量?