国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

深入理解 靜態(tài)類和靜態(tài)字段(C# 基礎(chǔ))

2019-11-17 02:53:16
字體:
供稿:網(wǎng)友

深入理解 靜態(tài)類和靜態(tài)字段(C# 基礎(chǔ))

序言

以前,總是被提醒,在編程過程中盡量少用靜態(tài)變量,數(shù)據(jù)丟失什么的,今天有空,禁不住對靜態(tài)變量的強烈好奇,跟我一起了解下靜態(tài)家族的內(nèi)幕吧。

靜態(tài)類

定義

靜態(tài)類與非靜態(tài)類的重要區(qū)別在于靜態(tài)類不能實例化,也就是說,不能使用 new 關(guān)鍵字創(chuàng)建靜態(tài)類類型的變量。在聲明一個類時使用static關(guān)鍵字,具有兩個方面的意義:首先,它防止程序員寫代碼來實例化該靜態(tài)類;其次,它防止在類的內(nèi)部聲明任何實例字段或方法。

靜態(tài)類是自C# 2.0才引入的,C# 1.0不支持靜態(tài)類聲明。程序員必須聲明一個私有構(gòu)造器。私有構(gòu)造器禁止開發(fā)者在類的范圍之外實例化類的實例。使用私有構(gòu)造器的效果與使用靜態(tài)類的效果非常相似。

私有構(gòu)造器與靜態(tài)類的區(qū)別:1)私有構(gòu)造器方式仍然可以從類的內(nèi)部對類進行實例化,而靜態(tài)類禁止從任何地方實例化類,其中包括從類自身內(nèi)部;2)在使用私有構(gòu)造器的類中,是允許有實例成員的,而C# 2.0和更高版本的編譯器不允許靜態(tài)類有任何實例成員。

使用靜態(tài)類的優(yōu)點在于,編譯器能夠執(zhí)行檢查以確保不致偶然地添加實例成員,編譯器將保證不會創(chuàng)建此類的實例。靜態(tài)類的另一個特征在于,C#編譯器會自動把它標(biāo)記為sealed。這個關(guān)鍵字將類指定為不可擴展;換言之,不能從它派生出其他類。

靜態(tài)類的主要特性:

1.僅包含靜態(tài)成員

2.無法實例化

3.是密封的

4.不能包含實例構(gòu)造函數(shù)。

生命周期

當(dāng)加載引用靜態(tài)類的程序時,.NET Framework 公共語言運行時 (CLR) 將加載該靜態(tài)類的類型信息,程序不能指定加載靜態(tài)類的確切時間。但是,可以保證在程序中首次引用該類前加載該類,初始化該類的字段并調(diào)用其靜態(tài)構(gòu)造函數(shù)。 靜態(tài)構(gòu)造函數(shù)僅調(diào)用一次,在程序駐留的應(yīng)用程序域的生存期內(nèi),靜態(tài)類一直保留在內(nèi)存中。

也就是說,當(dāng)頁面第一次被訪問的時候,相當(dāng)于頁面被構(gòu)造,靜態(tài)變量被靜態(tài)構(gòu)造器初始化,然后再次訪問這個頁面的時候,雖然非靜態(tài)資源重新被構(gòu)造,但是此時靜態(tài)資源并不被重新構(gòu)造并一直存在。

靜態(tài)成員

定義

非靜態(tài)類可以包含靜態(tài)的方法、字段、屬性或事件。即使沒有創(chuàng)建類的實例,也可以調(diào)用該類中的靜態(tài)成員。

始終通過類名而不是實例名稱訪問靜態(tài)成員。

無論對一個類創(chuàng)建多少個實例,它的靜態(tài)成員都只有一個副本。

靜態(tài)方法和屬性不能訪問其包含類型中的非靜態(tài)字段和事件,并且不能訪問任何對象的實例變量(除非在方法參數(shù)中顯式傳遞)

靜態(tài)方法可以被重載但不能被重寫,因為它們屬于類,不屬于類的任何實例。

雖然字段不能聲明為 static const,但 const字段的行為在本質(zhì)上是靜態(tài)的。這樣的字段屬于類型,不屬于類型的實例。 因此,可以同對待靜態(tài)字段一樣使用 ClassName.MemberName 表示法來訪問 const 字段。不需要對象實例。

C# 不支持靜態(tài)局部變量(在方法范圍內(nèi)聲明的變量)

靜態(tài)字段被類的所有實例所共享,即此類的所有實例都訪問同一內(nèi)存地址。

靜態(tài)字段有兩個常見的用法:一是記錄已實例化對象的個數(shù),二是存儲必須在所有實例之間共享的值。

生命周期

靜態(tài)成員在第一次被訪問之前并且在調(diào)用靜態(tài)構(gòu)造函數(shù)(如有存在)之前進行初始化,此后一直保持在內(nèi)存中,直到應(yīng)用程序域的生命周期結(jié)束。

小結(jié)

靜態(tài)字段一旦被使用,便會一直存在內(nèi)存中直到程序生命周期結(jié)束。所以使用靜態(tài)成員會很占用內(nèi)存資源。

如果非靜態(tài)類中含有靜態(tài)成員,則無論類被創(chuàng)建多少次,靜態(tài)成員是不變的。

另外,使用靜態(tài)類或者靜態(tài)成員應(yīng)該考慮線程安全,即在多線程的情況下靜態(tài)資源的占用問題。

參考:http://m.survivalescaperooms.com/devinzhang/archive/2012/02/09/2344105.html


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 闽侯县| 阿图什市| 金寨县| 滦南县| 高密市| 宾阳县| 静安区| 应用必备| 随州市| 商河县| 宜宾市| 海林市| 小金县| 庆城县| 德令哈市| 廊坊市| 常宁市| 光泽县| 松江区| 康乐县| 勐海县| 中牟县| 阿拉善右旗| 榆中县| 东台市| 元谋县| 吴忠市| 三都| 石台县| 蛟河市| 长春市| 嘉峪关市| 连山| 丰原市| 丹凤县| 溧水县| 万宁市| 宁陕县| 延寿县| 宜都市| 吴堡县|