一、static關(guān)鍵字
static 關(guān)鍵字,用于修飾類,字段,屬性,方法,構(gòu)造方法等。被 static 修飾的類稱之為“靜態(tài)類”;
被 static 修飾的成員稱之為“靜態(tài)成員”,被修飾過(guò)的成員分別稱為:靜態(tài)字段,靜態(tài)屬性,靜態(tài)方法,靜態(tài)構(gòu)造方法。
二、靜態(tài)字段
1.概念
被 static 關(guān)鍵字修飾的字段,叫做“靜態(tài)字段”。
靜態(tài)字段不屬于任何對(duì)象,只屬于類,必須要用 類名.靜態(tài)字段名 進(jìn)行訪問(wèn),反過(guò)來(lái)通過(guò) 對(duì)象名.靜態(tài)字段名 的方式是訪問(wèn)不到靜態(tài)字段的。
2.注意事項(xiàng)
靜態(tài)字段是可以重新賦值的,類名.靜態(tài)字段名 = 新的值;
靜態(tài)字段存儲(chǔ)的數(shù)據(jù)在內(nèi)存中只有一份;
實(shí)例(對(duì)象)字段在內(nèi)存中會(huì)有 N 份,有多少對(duì)象就會(huì)有多少實(shí)例字段;
例如:
三、靜態(tài)屬性
1.概念
被 static 關(guān)鍵字修飾的屬性,叫做“靜態(tài)屬性”。
靜態(tài)屬性用于對(duì)靜態(tài)字段進(jìn)行封裝,并保證靜態(tài)字段值的合法性;
靜態(tài)屬性使用 類名.靜態(tài)屬性名 進(jìn)行訪問(wèn);
2.注意事項(xiàng)
靜態(tài)屬性不能用于封裝非靜態(tài)字段,因?yàn)殪o態(tài)的類成員是先于非靜態(tài)的類成員存在的。在還沒(méi)有對(duì)象之前,靜態(tài)類成員就已經(jīng)存在了
?
四、靜態(tài)類
當(dāng)類中的成員全部都是靜態(tài)成員的時(shí)候,就可以把這個(gè)類聲明為靜態(tài)類
聲明靜態(tài)類時(shí)需要在class關(guān)鍵字之前就愛上static關(guān)鍵字
靜態(tài)類與非靜態(tài)類的重要區(qū)別在于靜態(tài)類不能實(shí)例化,也就是說(shuō),不能使用 new 關(guān)鍵字創(chuàng)建靜態(tài)類類型的變量。在聲明一個(gè)類時(shí)使用static關(guān)鍵字,具有兩個(gè)方面的意義:首先,它防止程序員寫代碼來(lái)實(shí)例化該靜態(tài)類;其次,它防止在類的內(nèi)部聲明任何實(shí)例字段或方法。
靜態(tài)類的主要特性:
??? 僅包含靜態(tài)成員。
??? 無(wú)法實(shí)例化。
??? 靜態(tài)類的本質(zhì),是一個(gè)抽象的密封類,所以不能被繼承,也不能被實(shí)例化。
??? 不能包含實(shí)例構(gòu)造函數(shù)。
??? 如果一個(gè)類下面的所有成員,都需要被共享,那么可以把這個(gè)類定義為靜態(tài)類。
靜態(tài)類與私有構(gòu)造函數(shù)區(qū)別
??? 私有構(gòu)造器方式仍然可以從類的內(nèi)部對(duì)類進(jìn)行實(shí)例化,而靜態(tài)類禁止從任何地方實(shí)例化類,其中包括從類自身內(nèi)部。
??? 使用私有構(gòu)造器的類中,是允許有實(shí)例成員的,編譯器不允許靜態(tài)類有任何實(shí)例成員。
??? 使用靜態(tài)類的優(yōu)點(diǎn)在于,編譯器能夠執(zhí)行檢查以確保不致偶然地添加實(shí)例成員,編譯器將保證不會(huì)創(chuàng)建此類的實(shí)例。
??? C#編譯器會(huì)自動(dòng)把它標(biāo)記為sealed。這個(gè)關(guān)鍵字將類指定為不可擴(kuò)展;換言之,不能從它派生出其他類。
例:
五、靜態(tài)變量
??? 通過(guò)static關(guān)鍵字修飾,是屬于類,實(shí)例成員屬于對(duì)象,在這個(gè)類第一次加載的時(shí)候,這個(gè)類下面的所有靜態(tài)成員會(huì)被加載。
??? 靜態(tài)成員只被創(chuàng)建一次,所以靜態(tài)成員只有一份,實(shí)例成員有多少個(gè)對(duì)象,就有多少份。
??? 類加載的時(shí)候,所有的靜態(tài)成員就會(huì)被創(chuàng)建在“靜態(tài)存儲(chǔ)區(qū)”里面,一旦創(chuàng)建直到程序退出,才會(huì)被回收。
??? 變量需要被共享的時(shí)候,方法需要被反復(fù)調(diào)用的時(shí)候,就可以把這些成員定義為靜態(tài)成員。
??? 在靜態(tài)方法中,不能直接調(diào)用實(shí)例成員,因?yàn)殪o態(tài)方法被調(diào)用的時(shí)候,對(duì)象還有可能不存在。
??? this/base 關(guān)鍵字在靜態(tài)方法中不能使用,因?yàn)橛锌赡軐?duì)象還不存在。
??? 可以創(chuàng)建這個(gè)類的對(duì)象,制定對(duì)象的成員在靜態(tài)方法中操作。
??? 在實(shí)例方法中,可以調(diào)用靜態(tài)成員,因?yàn)檫@個(gè)時(shí)候靜態(tài)成員肯定存在。
??? 非靜態(tài)類可以包含靜態(tài)的方法、字段、屬性或事件。
??? 無(wú)論對(duì)一個(gè)類創(chuàng)建多少個(gè)實(shí)例,它的靜態(tài)成員都只有一個(gè)副本。
??? 靜態(tài)方法和屬性不能訪問(wèn)其包含類型中的非靜態(tài)字段和事件,并且不能訪問(wèn)任何對(duì)象的實(shí)例變量。
??? 靜態(tài)方法只能被重載,而不能被重寫,因?yàn)殪o態(tài)方法不屬于類的實(shí)例成員。
??? 雖然字段不能聲明為 static、const,但 const 字段的行為在本質(zhì)上是靜態(tài)的。這樣的字段屬于類,不屬于類的實(shí)例。
六、靜態(tài)方法
??? 靜態(tài)方法是不屬于特定對(duì)象的方法。
??? 靜態(tài)方法可以訪問(wèn)靜態(tài)成員變量。
??? 靜態(tài)方法不可以直接訪問(wèn)實(shí)例變量,可以在實(shí)例函數(shù)調(diào)用的情況下,實(shí)例變量做為參數(shù)傳給靜態(tài)方法。
??? 靜態(tài)方法也不能直接調(diào)用實(shí)例方法,可以間接調(diào)用,首先要?jiǎng)?chuàng)建一個(gè)類的實(shí)例,然后通過(guò)這一特定對(duì)象來(lái)調(diào)用靜態(tài)方法。
七、靜態(tài)構(gòu)造函數(shù)
??? 靜態(tài)類可以有靜態(tài)構(gòu)造函數(shù),靜態(tài)構(gòu)造函數(shù)不可繼承。
??? 靜態(tài)構(gòu)造函數(shù)可以用于靜態(tài)類,也可用于非靜態(tài)類。
??? 靜態(tài)構(gòu)造函數(shù)無(wú)訪問(wèn)修飾符、無(wú)參數(shù),只有一個(gè) static 標(biāo)志。
??? 靜態(tài)構(gòu)造函數(shù)不可被直接調(diào)用,當(dāng)創(chuàng)建類實(shí)例或引用任何靜態(tài)成員之前,靜態(tài)構(gòu)造函數(shù)被自動(dòng)執(zhí)行,并且只執(zhí)行一次。
?例:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-418431.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-418431.html
到了這里,關(guān)于C# -- static 關(guān)鍵字的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!