我对C#中static关键字的真正含义感到困惑。我在互联网上浏览过不同的文章,但没有一篇真正帮助我理解它的含义,其他来源也不可信。我知道堆栈溢出有一些聪明的头脑谁可以帮助我了解静态的真正意义,如c中的静态关键字#
- 当他们被初始化。
- 静态方法,属性,类和构造
- 静态VS只读VS恒定
我对C#中static关键字的真正含义感到困惑。我在互联网上浏览过不同的文章,但没有一篇真正帮助我理解它的含义,其他来源也不可信。我知道堆栈溢出有一些聪明的头脑谁可以帮助我了解静态的真正意义,如c中的静态关键字#
总之,静态实际上意味着“与一种类型代替所述类型的任何一个实例关联”。所以有一个一个类型(在一个AppDomain内)的静态变量的集合,无论你有0个还是一个万;你并不需要一个实例访问静态成员,等等
的确切点静态变量的初始化取决于是否也有一个静态构造函数或没有,但很广义上说,它的“一次,通常前班上发生的任何重大事件“。 (为一个更详细的描述见this blog post。)
虽然readonly
字段可以是静态的或实例(即相关的类型或相关的类型的实例),const
值总是隐式静态的(它们”重新编译时常量,所以每个实例只有一个副本是没有意义的)。
有时您可能会看到static
被描述为“一个类型的所有实例之间共享” - 我个人不喜欢是描述,因为它表明,必须有至少一个实例......而实际上,你不为了使用静态成员,不需要任何实例。我更喜欢将它们视为完全独立,而不是在实例之间“共享”。
如何整洁和详细:)我的upvote! – 2012-02-23 10:30:22
谢谢:)这有助于我理解“静态” – Karthik 2013-01-30 11:55:43
您的博客文章链接已损坏,根据这篇文章http://stackoverflow.com/a/665696/1668069 appdomain共享堆,是真的,静态类总是有他们在AppDomains上共享的堆中的1个实例,是真的吗? – Mathematics 2015-10-16 13:32:24
我可以推荐这篇文章,它似乎很好地说明了: Static Keyword Demystified
我也建议覆盖static关键字的各种用途的官方C#编程指南文章。你可以从那里,因为有大量的链接到不同的MSDN文章:Static Classes and Static Class Members (C# Programming Guide)
@ Jan Kratochvil很好的参考! – SIslam 2016-02-14 11:33:11
从技术文档:一类
的静态字段变量初始化对应分配的 序列被执行在 的文本顺序中,它们出现在类声明中
静态成员初次访问该类时初始化并按文本顺序执行。
Static
方法,属性是类的一部分,而不是实例。与readonly
或constant
无关。Static
是一种像会员acess,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
http://www.codeproject.com/Articles/15269/Static-Keyword-Demystified – ken2k 2012-02-23 09:57:55
这是一个家庭作业的问题? – 2012-02-23 09:58:40
您是否阅读过['static'](http://msdn.microsoft.com/zh-cn/library/98f28cdx.aspx)上的MSDN文档?你有什么不明白的地方? – Oded 2012-02-23 09:59:02