C#中靜態(tài)的深入理解
一、靜態(tài)成員
1、通過(guò)static關(guān)鍵字修飾,是屬于類,實(shí)例成員屬于對(duì)象,在這個(gè)類第一次加載的時(shí)候,這個(gè)類下面的所有靜態(tài)成員會(huì)被加載。
2、靜態(tài)成員只被創(chuàng)建一次,所以靜態(tài)成員只有一份,實(shí)例成員有多少個(gè)對(duì)象,就有多少份。
3、類加載的時(shí)候,所有的靜態(tài)成員就會(huì)被創(chuàng)建在“靜態(tài)存儲(chǔ)區(qū)”里面,一旦創(chuàng)建直到程序退出,才會(huì)被回收。
注:Person p;//這樣實(shí)際上就已經(jīng)被加載了。
4、變量需要被共享的時(shí)候,方法需要被反復(fù)調(diào)用的時(shí)候,就可以把這些成員定義為靜態(tài)成員。
5、在靜態(tài)方法中,不能直接調(diào)用實(shí)例成員,因?yàn)殪o態(tài)方法被調(diào)用的時(shí)候,對(duì)象還有可能不存在。
6、this/base 關(guān)鍵字在靜態(tài)方法中不能使用,因?yàn)橛锌赡軐?duì)象還不存在。
7、可以創(chuàng)建這個(gè)類的對(duì)象,制定對(duì)象的成員在靜態(tài)方法中操作。
8、在實(shí)例方法中,可以調(diào)用靜態(tài)成員,因?yàn)檫@個(gè)時(shí)候靜態(tài)成員肯定存在。
二、靜態(tài)成員和實(shí)例成員的區(qū)別
1、生命周期不一樣。
2、在內(nèi)存中存儲(chǔ)的位置不一樣。
三、靜態(tài)類
1、被static關(guān)鍵字修飾的類。
2、靜態(tài)類里面只能聲明靜態(tài)成員。
3、靜態(tài)類的本質(zhì),是一個(gè)抽象的密封類,所以不能被繼承,也不能被實(shí)例化。
4、如果一個(gè)類下面的所有成員,都需要被共享,那么可以把這個(gè)類定義為靜態(tài)類。
四、靜態(tài)構(gòu)造函數(shù)
1、這個(gè)類的成員,第一次被訪問(wèn)之前,就會(huì)執(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("實(shí)例構(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)存儲(chǔ)區(qū),i=0,接著調(diào)用了類的成員,這時(shí)候靜態(tài)構(gòu)造函數(shù)就會(huì)被調(diào)用,i=2
Program p = new Program();
Console.Write(Program.i);//結(jié)果為1,實(shí)力化后,調(diào)用了實(shí)例構(gòu)造函數(shù),i=1,因?yàn)殪o態(tài)構(gòu)造函數(shù)只執(zhí)行一次,所以不會(huì)再執(zhí)行。
}
}
- C#靜態(tài)static的用法實(shí)例分析
- c# static 靜態(tài)數(shù)據(jù)成員
- c# static的全部用法收集整理
- C#靜態(tài)變量與實(shí)例變量實(shí)例分析
- C# 靜態(tài)變量與靜態(tài)方法實(shí)例研究
- 學(xué)習(xí)C#靜態(tài)函數(shù)及變量的一個(gè)精典例子與代碼
- C#靜態(tài)方法與非靜態(tài)方法實(shí)例分析
- C#中實(shí)現(xiàn)抽象類里建立靜態(tài)方法
- C#中靜態(tài)構(gòu)造函數(shù)的幾點(diǎn)說(shuō)明介紹
- C#中static靜態(tài)變量的用法實(shí)例
相關(guān)文章
Windows系統(tǒng)中使用C#編寫(xiě)藍(lán)牙通信程序的簡(jiǎn)單實(shí)例
這篇文章主要介紹了Windows系統(tǒng)中使用C#編寫(xiě)藍(lán)牙通信程序的簡(jiǎn)單實(shí)例,文中的例子使用到了32feet.NET中的InTheHand.Net.Personal類庫(kù),需要的朋友可以參考下2016-04-04
C#實(shí)現(xiàn)子窗體與父窗體通信方法實(shí)例總結(jié)
這篇文章主要介紹了C#實(shí)現(xiàn)子窗體與父窗體通信方法,實(shí)例總結(jié)了常用的四種窗體通信方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09
C# 參考之訪問(wèn)關(guān)鍵字:base、this
由于靜態(tài)成員函數(shù)存在于類一級(jí),并且不是對(duì)象的一部分,因此沒(méi)有 this 指針。在靜態(tài)方法中引用 this 是錯(cuò)誤的。 索引器允許類或結(jié)構(gòu)的實(shí)例按照與數(shù)組相同的方式進(jìn)行索引。索引器類似于屬性,不同之處在于它們的訪問(wèn)器采用參數(shù)。2008-03-03
詳解搭建基于C#和Appium的Android自動(dòng)測(cè)試環(huán)境
如果想做手機(jī)端的自動(dòng)化測(cè)試,Appium是首選的測(cè)試框架,因?yàn)榫W(wǎng)上使用的人多,資料豐富,支持語(yǔ)言多Jave,Python,C#,Ruby,PHP,碰見(jiàn)問(wèn)題也容易得到幫助。2021-05-05
C#打開(kāi)php鏈接傳參然后接收返回值的關(guān)鍵代碼
這篇文章主要介紹了C#打開(kāi)php鏈接傳參然后接收返回值的關(guān)鍵代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08
C#實(shí)現(xiàn)金額轉(zhuǎn)換成中文大寫(xiě)金額
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)金額轉(zhuǎn)換成中文大寫(xiě)金額,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08
Unity3D實(shí)現(xiàn)人物轉(zhuǎn)向與移動(dòng)
這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)人物轉(zhuǎn)向與移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01

