C#靜態(tài)類和靜態(tài)類成員詳解
C#靜態(tài)類和靜態(tài)類成員用于創(chuàng)建無需創(chuàng)建類的實(shí)例就能夠訪問的數(shù)據(jù)和函數(shù)。靜態(tài)類成員可用于分離獨(dú)立于任何對(duì)象標(biāo)識(shí)的數(shù)據(jù)和行為:無論對(duì)象發(fā)生什么更改,這些數(shù)據(jù)和函數(shù)都不會(huì)隨之變化。當(dāng)類中沒有依賴對(duì)象標(biāo)識(shí)的數(shù)據(jù)或行為時(shí),就可以使用靜態(tài)類。
讓我們來看看靜態(tài)類:
類可以聲明為static的,以指示它僅包含靜態(tài)成員。不能使用 new 關(guān)鍵字創(chuàng)建靜態(tài)類的實(shí)例。靜態(tài)類在加載包含該類的程序或命名空間時(shí)由 .NET Framework 公共語言運(yùn)行庫 (CLR) 自動(dòng)加載。
使用靜態(tài)類來包含不與特定對(duì)象關(guān)聯(lián)的方法。例如,創(chuàng)建一組不操作實(shí)例數(shù)據(jù)并且不與代碼中的特定對(duì)象關(guān)聯(lián)的方法是很常見的要求。您應(yīng)該使用靜態(tài)類來包含那些方法。
靜態(tài)類的主要功能如下:
1、它們僅包含靜態(tài)成員。
2、它們不能被實(shí)例化。
3、它們是密封的。
4、它們不能包含實(shí)例構(gòu)造函數(shù)(C# 編程指南)。
因此創(chuàng)建靜態(tài)類與創(chuàng)建僅包含靜態(tài)成員和私有構(gòu)造函數(shù)的類大致一樣。私有構(gòu)造函數(shù)阻止類被實(shí)例化。
使用靜態(tài)類的優(yōu)點(diǎn)在于,編譯器能夠執(zhí)行檢查以確保不致偶然地添加實(shí)例成員。編譯器將保證不會(huì)創(chuàng)建此類的實(shí)利。
靜態(tài)類是密封的,因此不可被繼承。靜態(tài)類不能包含構(gòu)造函數(shù),但仍可聲明靜態(tài)構(gòu)造函數(shù)以分配初始值或設(shè)置某個(gè)靜態(tài)狀態(tài)。
何時(shí)使用靜態(tài)類
假設(shè)有一個(gè)類 CompanyInfo,它包含用于獲取有關(guān)公司名稱和地址信息的下列方法。
- class CompanyInfo
- {
- public string GetCompanyName() { return "CompanyName"; }
- public string GetCompanyAddress() { return "CompanyAddress"; }
- //...
- }
不需要將這些方法附加到該類的具體實(shí)例。因此,您可以將它聲明為靜態(tài)類,而不是創(chuàng)建此類的不必要實(shí)例,如下所示:
- static class CompanyInfo
- {
- public static string GetCompanyName() {
- return "CompanyName"; }
- public static string GetCompanyAddress() {
- return "CompanyAddress"; }
- //...
- }
使用靜態(tài)類作為不與特定對(duì)象關(guān)聯(lián)的方法的組織單元。此外,靜態(tài)類能夠使您的實(shí)現(xiàn)更簡單、迅速,因?yàn)槟槐貏?chuàng)建對(duì)象就能調(diào)用其方法。以一種有意義的方式組織類內(nèi)部的方法(例如 System 命名空間中的 Math 類的方法)是很有用的。靜態(tài)成員
即使沒有創(chuàng)建類的實(shí)例,也可以調(diào)用該類中的靜態(tài)方法、字段、屬性或事件。如果創(chuàng)建了該類的任何實(shí)例,不能使用實(shí)例來訪問靜態(tài)成員。只存在靜態(tài)字段和事件的一個(gè)副本,靜態(tài)方法和屬性只能訪問靜態(tài)字段和靜態(tài)事件。靜態(tài)成員通常用于表示不會(huì)隨對(duì)象狀態(tài)而變化的數(shù)據(jù)或計(jì)算;例如,數(shù)學(xué)庫可能包含用于計(jì)算正弦和余弦的靜態(tài)方法。
在成員的返回類型之前使用 static 關(guān)鍵字來聲明靜態(tài)類成員,例如:
- public class Automobile
- {
- public static int NumberOfWheels = 4;
- public static int SizeOfGasTank
- {
- get
- {
- return 15;
- }
- }
- public static void Drive() { }
- public static event EventType RunOutOfGas;
- //other non-static fields and properties...
- }
靜態(tài)成員在***次被訪問之前并且在任何靜態(tài)構(gòu)造函數(shù)(如調(diào)用的話)之前初始化。若要訪問靜態(tài)類成員,應(yīng)使用類名而不是變量名來指定該成員的位置。例如:
- Automobile.Drive();
- int i = Automobile.NumberOfWheels;
C#靜態(tài)類和靜態(tài)類成員的基本內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C#靜態(tài)類和靜態(tài)類成員有所幫助。
【編輯推薦】