c#中的静态关键字

时间:2012-02-23 09:55:25

标签: c# static

我对C#中static关键字的真正含义感到困惑。我在互联网上经历了不同的文章,但没有一篇能真正帮助我理解它的含义而其他来源不可信。我知道Stack Overflow有一些聪明的头脑可以帮助我理解静态的真正含义

  • 初始化时。
  • 静态方法,属性,类和构造函数
  • 静态vs只读与常量

4 个答案:

答案 0 :(得分:83)

简而言之,static实际上意味着“与类型相关联而不是类型的任何一个实例”。因此,对于类型(在AppDomain中),一个静态变量集是否有0个实例或100万个;您不需要实例来访问静态成员等

静态变量初始化的精确点取决于是否还有一个静态构造函数,但从广义上讲它是“一次,通常在类中发生重大事件之前”。 (有关更详细的说明,请参阅this blog post。)

虽然readonly字段可以是静态字段或实例字段(即与类型相关或与该类型实例相关),但const总是隐式静态(它们是编译时常量,因此每个实例都有一个副本是没有意义的。

您有时可能会将static描述为“在所有类型的实例之间共享” - 我个人不喜欢该描述,因为它表明必须至少有一个实例...实际上,您不需要任何实例来使用静态成员。我更愿意将它们视为完全独立的,而不是在实例之间“共享”。

答案 1 :(得分:12)

我可以推荐这篇文章,看起来很有描述性: Static Keyword Demystified

我还推荐一篇官方的c#编程指南文章,其中涵盖了static关键字的各种用法。您可以从那里开始,因为有很多链接指向不同的MSDN文章:Static Classes and Static Class Members (C# Programming Guide)

答案 2 :(得分:8)

关于常量(常量)和只读的一点点:

  • constant或const是变量,不能修改,在编译时知道哪个值。
  • readonly非常类似于常量,这也不能修改,区别在于readonly字段可以在构造函数中修改/初始化一次。之后,readonly与constant一样。

使用示例:

constant: 
const  int a=10; // value cannot be modified, value is known at compile time

但是当我们想要在编译时不知道常量字段值时该怎么办?

e.g const PersonClass a=new PersonClass("name"); // error

答案是一个只读字段:

readonly:
readonly PersonClass a=new PersonClass("name"); // all correct

答案 3 :(得分:7)

来自文档:

  

类的静态字段变量初始值设定项对应于a   以文本顺序执行的分配顺序   它们出现在类声明中

静态成员在首次访问类时初始化,并以文本顺序执行。

Static方法,属性是的一部分,而不是实例。

Staticreadonlyconstant无关。 Static就像会员 acessed readonlyconstant就像会员存储/管理