資源描述:
《c#中的靜態(tài)成員、靜態(tài)方法、靜態(tài)函數(shù)之說》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、嘉園地理科學(xué)與旅游學(xué)院GIS1103班-----寒星一C#靜態(tài)成員
2、靜態(tài)方法
3、靜態(tài)構(gòu)造函數(shù)一、靜態(tài)成員(static)(1) 靜態(tài)成員屬于類所有,非靜態(tài)成員屬于類的實例所有。(2)每創(chuàng)建一個類的實例,都會在內(nèi)存中為非靜態(tài)成員新分配一塊存儲;非靜態(tài)成員屬于類所有,為各個類的實例所公用,無論類創(chuàng)建了多少實例,類的靜態(tài)成員在內(nèi)存中只占同一塊區(qū)域。二、靜態(tài)方法(1) 靜態(tài)方法屬于類所有,類實例化前即可使用。(2)非靜態(tài)方法可以訪問類中的任何成員,靜態(tài)方法只能訪問類中的靜態(tài)成員。因為靜態(tài)方法在類實例化前就可以使用,而
4、類中的非靜態(tài)變量必須在實例化之后才能分配內(nèi)存,這樣,靜態(tài)方法調(diào)用時無法判斷非靜態(tài)變量使用的內(nèi)存地址。所以無法使用.而靜態(tài)變量的地址對類來說是固定的,故可以使用。三、靜態(tài)構(gòu)造函數(shù)(1)用于對靜態(tài)字段、只讀字段等的初始化。(2)添加static關(guān)鍵字,不能添加訪問修飾符,因為靜態(tài)構(gòu)造函數(shù)都是私自有的。 (3)類的靜態(tài)構(gòu)造函數(shù)在給定應(yīng)用程序域中至多執(zhí)行一次:只有創(chuàng)建類的實例或者引用類任何靜態(tài)成員才激發(fā)靜態(tài)構(gòu)造函數(shù).(4)靜態(tài)構(gòu)造函數(shù)是不可繼承的,而且不能被直接調(diào)用。(5)如果類中包含用來開始執(zhí)行的Main方法,則
5、該類的靜態(tài)構(gòu)造函數(shù)將在調(diào)用Main方法之前執(zhí)行。任何帶有初始值設(shè)定項的靜態(tài)字段,則在執(zhí)行該類的靜態(tài)構(gòu)造函數(shù)時,先要按照文本順序執(zhí)行那些初始值設(shè)定項。(6)如果沒有編寫靜態(tài)構(gòu)造函數(shù),而這時類中包含帶有初始值設(shè)定的靜態(tài)字段,那么編譯器會自動生成默認的靜態(tài)構(gòu)造函數(shù)。(7)無參數(shù)的構(gòu)造函數(shù)可以與靜態(tài)構(gòu)造函數(shù)共存。盡管參數(shù)列表相同,但一個屬于類,一個屬于實例,所以不會沖突。MSDN對靜態(tài)構(gòu)造函數(shù)的解釋:靜態(tài)構(gòu)造函數(shù)用于初始化任何靜態(tài)數(shù)據(jù),或用于執(zhí)行僅需執(zhí)行一次的特定操作。在創(chuàng)建第一個實例或引用任何靜態(tài)成員之前,將自動
6、調(diào)用靜態(tài)構(gòu)造函數(shù)。靜態(tài)構(gòu)造函數(shù)具有以下特點:(1)靜態(tài)構(gòu)造函數(shù)既沒有訪問修飾符,也沒有參數(shù)。-6-嘉園地理科學(xué)與旅游學(xué)院GIS1103班-----寒星(2)在創(chuàng)建第一個實例或引用任何靜態(tài)成員之前,將自動調(diào)用靜態(tài)構(gòu)造(3)函數(shù)來初始化類。(4)無法直接調(diào)用靜態(tài)構(gòu)造函數(shù)。(5)在程序中,用戶無法控制何時執(zhí)行靜態(tài)構(gòu)造函數(shù)。(6)靜態(tài)構(gòu)造函數(shù)的典型用途是:當(dāng)類使用日志文件時,將使用這種構(gòu)造函數(shù)向日志文件中寫入項。(7)靜態(tài)構(gòu)造函數(shù)在為非托管代碼創(chuàng)建包裝類時也很有用,此時該構(gòu)造函數(shù)可以調(diào)用LoadLibrary方法。
7、二靜態(tài)類和類成員用于創(chuàng)建無需創(chuàng)建類的實例就能夠訪問的數(shù)據(jù)和函數(shù)。靜態(tài)類成員可用于分離獨立于任何對象標(biāo)識的數(shù)據(jù)和行為:無論對象發(fā)生什么更改,這些數(shù)據(jù)和函數(shù)都不會隨之變化。當(dāng)類中沒有依賴對象標(biāo)識的數(shù)據(jù)或行為時,就可以使用靜態(tài)類。靜態(tài)類類可以聲明為static,指示它僅包含靜態(tài)成員。不能使用new關(guān)鍵字創(chuàng)建靜態(tài)類的實例。靜態(tài)類在加載包含該類的程序或命名空間時由.NET.Framework公共語言運行庫(CLR)自動加載。使用靜態(tài)類來包含不與特定對象關(guān)聯(lián)的方法。例如,創(chuàng)建一組不操作實例數(shù)據(jù)并且不與代碼中的特定對象關(guān)
8、聯(lián)的方法是很常見的要求。您應(yīng)該使用靜態(tài)類來包含那些方法。靜態(tài)類的主要功能如下:它們僅包含靜態(tài)成員。它們不能被實例化。它們是密封的。它們不能包含實例構(gòu)造函數(shù)(C#編程指南)。因此,創(chuàng)建靜態(tài)類與創(chuàng)建僅包含靜態(tài)成員和私有構(gòu)造函數(shù)的類基本相同。私有構(gòu)造函數(shù)阻止類被實例化。使用靜態(tài)類的優(yōu)點在于,編譯器能夠執(zhí)行檢查以確保不致偶然地添加實例成員。編譯器將保證不會創(chuàng)建此類的實利。-6-嘉園地理科學(xué)與旅游學(xué)院GIS1103班-----寒星靜態(tài)類是密封的,因此不可被繼承。它們不能從除Object外的任何類中繼承。靜態(tài)類不能包含
9、實例構(gòu)造函數(shù);但是,它們可以具有靜態(tài)構(gòu)造函數(shù)。有關(guān)更多信息,請參見靜態(tài)構(gòu)造函數(shù)(C#編程指南)。何時使用靜態(tài)類假設(shè)有一個CompanyInfo類,它包含用于獲取有關(guān)公司名稱和地址信息的下列方法。classCompanyInfo{publicstringGetCompanyName(){return"CompanyName";}publicstringGetCompanyAddress(){return"CompanyAddress";}//...}不必將這些方法附加到該類的具體實例。因此,您可以將它聲明為靜
10、態(tài)類,而不是創(chuàng)建此類的不必要的實例:staticclassCompanyInfo{publicstaticstringGetCompanyName(){return"CompanyName";}publicstaticstringGetCompanyAddress(){return"CompanyAddress";}//...}使用靜態(tài)類作為不與特定對象關(guān)聯(lián)的方法的組織單元。此外,靜態(tài)類能夠使您的實現(xiàn)更簡單、迅速