我對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