“静态”在 c# 中是什么意思

本文关键字:是什么 意思 静态 | 更新日期: 2023-09-27 18:25:36

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

  • 当它们被初始化时。
  • 静态方法、属性、类和构造函数
  • 静态 vs 只读 vs 常量

“静态”在 c# 中是什么意思

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

静态

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

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

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

我可以推荐这篇文章,它似乎很有描述性:静态关键字揭秘

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

关于常量(const(和只读的一些信息:

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

使用示例:

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

来自文档:

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

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

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

Staticreadonlyconstant无关. Static是一种类似于成员的方式,readonly constant就像存储/管理的成员。

static 关键字在 C# 中用于指示成员属于类型本身而不是特定对象。这意味着无论从类型创建多少个对象,都只存在成员的一个副本。静态成员还经常用于创建不需要访问对象数据或行为的实用工具或帮助程序方法。