在c#中的静态关键字
我真的很困惑与静态关键字在C#中的真正含义。 我已经通过互联网上的不同文章,但没有一个真的帮助我了解它的意义和其他来源是不可信的。 我知道堆栈溢出有一些聪明的头脑可以帮助我理解静态的真正意义
- 当他们被初始化。
- 静态方法,属性,类和构造函数
- 静态与只读与常量
总之,静态有效的意思是“与一个types相关联,而不是任何一个types的实例”。 所以对于一个types(在一个AppDomain中),有一组静态variables,不pipe你是否有一个或一百万个; 您不需要实例来访问静态成员等
静态variables初始化的确切点取决于是否还有一个静态构造函数,但从广义上来说,它是“一次,通常在课程中发生任何重大事件之前”。 (有关更详细的描述,请参阅此博客文章 。)
虽然readonly
字段可以是静态的或实例的(即与types相关或与types的实例相关),但const
值始终是隐式静态的(它们是编译时常量,所以没有意义每个实例复制)。
有时你可能会看到static
被描述为“在一个types的所有实例之间共享” – 我个人不喜欢这个描述,因为它表明至less有一个实例…而实际上,你不需要任何实例为了使用静态成员。 我更喜欢把它们看作是完全独立的,而不是在实例之间“共享”。
我可以推荐这篇文章,它似乎很漂亮描述: 静态关键字揭秘
我还会推荐一个官方的c#编程指南文章,其中介绍了static关键字的各种用法。 您可以从那里去,因为有很多链接到不同的MSDN文章: 静态类和静态类成员(C#编程指南)
关于常量(const)和只读:
- 常量或常量是无法修改的variables,以及在编译时已知的值。
- 只读是非常类似于常量,这也不能修改,区别在于一个只读字段可以在构造函数中修改/初始化一次。 之后readonly是一样的常量。
使用示例:
constant: const int a=10; // value cannot be modified, value is known at compile time
但是当我们想要在编译时不知道值的恒定字段时该怎么办?
eg const PersonClass a=new PersonClass("name"); // error
答案是只读字段:
readonly: readonly PersonClass a=new PersonClass("name"); // all correct
从文档:
类的静态字段variables初始值设定项对应于一系列的赋值语句,它们按照它们出现在类声明中的文本顺序执行
静态成员在首次访问该类时初始化,并按文本顺序执行。
Static
方法,属性是类的一部分,而不是实例。
Static
与readonly
或constant
。 Static
是一个像成员一样的方式, readonly
和constant
就像一个成员存储/pipe理的方式 。