C#中靜態(tài)的深入理解
一、靜態(tài)成員
1、通過static關(guān)鍵字修飾,是屬于類,實例成員屬于對象,在這個類第一次加載的時候,這個類下面的所有靜態(tài)成員會被加載。
2、靜態(tài)成員只被創(chuàng)建一次,所以靜態(tài)成員只有一份,實例成員有多少個對象,就有多少份。
3、類加載的時候,所有的靜態(tài)成員就會被創(chuàng)建在“靜態(tài)存儲區(qū)”里面,一旦創(chuàng)建直到程序退出,才會被回收。
注:Person p;//這樣實際上就已經(jīng)被加載了。
4、變量需要被共享的時候,方法需要被反復(fù)調(diào)用的時候,就可以把這些成員定義為靜態(tài)成員。
5、在靜態(tài)方法中,不能直接調(diào)用實例成員,因為靜態(tài)方法被調(diào)用的時候,對象還有可能不存在。
6、this/base 關(guān)鍵字在靜態(tài)方法中不能使用,因為有可能對象還不存在。
7、可以創(chuàng)建這個類的對象,制定對象的成員在靜態(tài)方法中操作。
8、在實例方法中,可以調(diào)用靜態(tài)成員,因為這個時候靜態(tài)成員肯定存在。
二、靜態(tài)成員和實例成員的區(qū)別
1、生命周期不一樣。
2、在內(nèi)存中存儲的位置不一樣。
三、靜態(tài)類
1、被static關(guān)鍵字修飾的類。
2、靜態(tài)類里面只能聲明靜態(tài)成員。
3、靜態(tài)類的本質(zhì),是一個抽象的密封類,所以不能被繼承,也不能被實例化。
4、如果一個類下面的所有成員,都需要被共享,那么可以把這個類定義為靜態(tài)類。
四、靜態(tài)構(gòu)造函數(shù)
1、這個類的成員,第一次被訪問之前,就會執(zhí)行靜態(tài)構(gòu)造函數(shù)。
2、靜態(tài)構(gòu)造函數(shù)只被執(zhí)行一次。
Eg:
class Program
{
public static int i =0;
public Program()
{
i = 1;
Console.Write("實例構(gòu)造方法被調(diào)用");
}
static Program()
{
i = 2;
Console.Write("靜態(tài)構(gòu)造函數(shù)被執(zhí)行");
}
static void Main(string[] args)
{
Console.Write(Program.i);//結(jié)果為2,首先,類被加載,所有的靜態(tài)成員被創(chuàng)建在靜態(tài)存儲區(qū),i=0,接著調(diào)用了類的成員,這時候靜態(tài)構(gòu)造函數(shù)就會被調(diào)用,i=2
Program p = new Program();
Console.Write(Program.i);//結(jié)果為1,實力化后,調(diào)用了實例構(gòu)造函數(shù),i=1,因為靜態(tài)構(gòu)造函數(shù)只執(zhí)行一次,所以不會再執(zhí)行。
}
}
相關(guān)文章
WPF利用CommunityToolkit.Mvvm實現(xiàn)級聯(lián)選擇器
這篇文章主要介紹了WPF如何利用CommunityToolkit.Mvvm實現(xiàn)級聯(lián)選擇器,文中的示例代碼講解詳細,對我們的學(xué)習(xí)或工作有一定幫助,需要的小伙伴可以參考一下2023-12-12DevExpress的DateEdit設(shè)置顯示日期和時間的方法
本文主要介紹了DevExpress的DateEdit設(shè)置顯示日期和時間的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08深入理解C# abstract和virtual關(guān)鍵字
深入理解C# abstract和virtual關(guān)鍵字,學(xué)習(xí)c#的朋友可以參考下。2011-06-06c# WPF設(shè)置軟件界面背景為MediaElement并播放視頻
這篇文章主要介紹了c# WPF如何設(shè)置軟件界面背景為MediaElement并播放視頻,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03C# datagridview、datagrid、GridControl增加行號代碼解析
今天這篇文章小編就來給大家分享關(guān)于C# datagridview、datagrid、GridControl增加行號的介紹,主要包括WinForm中datagridview增加行號、WPF中datagrid增加行號、WPF dev控件GridControl增加行號三個內(nèi)容,感興趣等我小伙伴可以參考一下2021-10-10c#關(guān)于JWT跨域身份驗證的實現(xiàn)代碼
這篇文章主要介紹了c#關(guān)于JWT跨域身份驗證的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10