c#中的静态关键字

Zer*_*ity 47 c# static

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

  • 当他们初始化.
  • 静态方法,属性,类和构造函数
  • 静态vs只读和常量

Jon*_*eet 86

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

静态变量初始化的确切点取决于是否还有一个静态构造函数,但从广义上讲它是"一次,通常在类中发生重大事件之前".(有关更详细的说明,请参阅此博客文章.)

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

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


Jan*_*vil 12

我可以推荐这篇文章,看起来很有描述性: 静态关键字揭秘

我还推荐一篇官方的c#编程指南文章,其中涵盖了static关键字的各种用法.你可以从那里去,因为有很多链接到不同的MSDN文章:静态类和静态类成员(C#编程指南)


Lev*_*Lev 8

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

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

使用示例:

constant: 
const  int a=10; // value cannot be modified, value is known at compile time
Run Code Online (Sandbox Code Playgroud)

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

e.g const PersonClass a=new PersonClass("name"); // error
Run Code Online (Sandbox Code Playgroud)

答案是一个只读字段:

readonly:
readonly PersonClass a=new PersonClass("name"); // all correct
Run Code Online (Sandbox Code Playgroud)


Tig*_*ran 7

来自文档:

类的静态字段变量初始值设定项对应于按照文本顺序执行的赋值序列,它们出现在类声明中

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

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

Staticreadonlyor 无关constant.Static就像是一个构件的方式acessed,readonly并且constant就像是一个构件的方式存储/管理的.