C#中的靜態(tài)成員、靜態(tài)方法、靜態(tài)類介紹
1.靜態(tài)成員、實例成員
1.1定義及說明
數(shù)據(jù)成員:
靜態(tài)成員:靜態(tài)成員變量是和類相關聯(lián)的,可以作為類中"共"有的變量(是一個共性的表現(xiàn)),他不依賴特定對象的存在,訪問的時候通過類名加點操作符加變量名來訪問.
實例成員:實例成員變量是和對象相關聯(lián)的,訪問實例成員變量依賴于實例的存在.
函數(shù)成員:
靜態(tài)方法:靜態(tài)方法是不屬于特定對象的方法,靜態(tài)方法可以訪問靜態(tài)成員變量和靜態(tài)方法;靜態(tài)方法不可以直接訪問實例變量和實例方法,可以間接調用,首先要創(chuàng)建一個類的實例,然后通過這一特定對象來調用靜態(tài)方法;
實例方法:一個實例方法的執(zhí)行與特定對象關聯(lián),他的執(zhí)行需要一個對象存在。實例方法可以直接訪問靜態(tài)變量和實例變量,當多個實例對象存在時,內存中并不是存在美個特定的實例方法的拷貝,而是,相同類的所有對象都共享每個實例方法的一個拷貝(實例方法只占用“一套”空間)。
靜態(tài)方法和實例方法的訪問權限表
靜態(tài)成員變量 | 靜態(tài)方法 | 實例成員變量 | 實例方法 | |
靜態(tài)方法 | 直接訪問 | 直接訪問 | 不可直接訪問 | 不可直接訪問 |
實例方法 | 直接訪問 | 直接訪問 | 直接訪問 | 直接訪問 |
總之:實例方法的存在必須要有對象實例的存在,如果對象實例不存在,則實例方法也就沒有調用它的主人。靜態(tài)方法的存在前提是類的存在,所以無需聲明和New對象。
1.2代碼演示
class Program { static void Main(string[] args) { Class1.CallObjectFunc();//靜態(tài)調用 Console.WriteLine(Environment.NewLine); Class1 tmpClass = new Class1();//實例調用 tmpClass.ObjectFunc(); Console.ReadKey(); } } class Class1 { static int Class_m = 9;//靜態(tài)成員 private int object_m = 8;//實例成員 public static void CallObjectFunc() { Console.WriteLine("------------靜態(tài)方法調用開始:"); Class1 class1 = new Class1(); class1.ObjectFunc(); Console.WriteLine("object_m:" + class1.object_m.ToString()); Console.WriteLine("------------靜態(tài)方法調用結束:"); } public void ObjectFunc() { Console.WriteLine("實例方法調用開始:"); Console.WriteLine("Class_m:" + Class_m.ToString()); Console.WriteLine("實例方法調用結束:"); } }
輸出結果:
2.靜態(tài)類
類可以聲明為 static 的,以指示它僅包含靜態(tài)成員。不能使用 new 關鍵字創(chuàng)建靜態(tài)類的實例。例如,創(chuàng)建一組不操作實例數(shù)據(jù)并且不與代碼中的特定對象關聯(lián)的方法是很常見的要求。您應該使用靜態(tài)類來包含那些方法。
靜態(tài)類的主要功能如下:
它們僅包含靜態(tài)成員。----函數(shù)成員和變量都必須有static修飾
它們不能被實例化。
它們是密封的。-----------編譯器編譯時自動生成sealed標記
它們不能包含實例構造函數(shù)。
因此創(chuàng)建靜態(tài)類與創(chuàng)建僅包含靜態(tài)成員和私有構造函數(shù)的類大致一樣。私有構造函數(shù)阻止類被實例化。
使用靜態(tài)類的優(yōu)點在于,編譯器能夠執(zhí)行檢查以確保不致偶然地添加實例成員。編譯器將保證不會創(chuàng)建此類的實利。
靜態(tài)類是密封的,因此不可被繼承。靜態(tài)類不能包含構造函數(shù),但仍可聲明靜態(tài)構造函數(shù)以分配初始值或設置某個靜態(tài)狀態(tài)。
靜態(tài)類:
static class CompanyInfo { public static string GetCompanyName() { return "CompanyName"; } public static string GetCompanyAddress() { return "CompanyAddress"; } }
相關文章
selenium.chrome寫擴展攔截或轉發(fā)請求功能
Selenium?WebDriver?是一組開源?API,用于自動測試?Web?應用程序,利用它可以通過代碼來控制chrome瀏覽器,今天通過本文給大家介紹selenium?chrome寫擴展攔截或轉發(fā)請求功能,感興趣的朋友一起看看吧2022-07-07C# Winfrom實現(xiàn)Skyline畫直線功能的示例代碼
這篇文章主要介紹了C# Winfrom實現(xiàn)Skyline畫直線功能的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12C# 實現(xiàn)Table的Merge,Copy和Clone
這篇文章主要介紹了C# 實現(xiàn)Table的Merge,Copy和Clone,幫助大家更好的利用c#處理文件,感興趣的朋友可以了解下2020-12-12