C#靜態(tài)static的用法實(shí)例分析
本文實(shí)例講述了C#靜態(tài)static的用法,分享給大家供大家參考。具體用法分析如下:
一、靜態(tài)類
靜態(tài)類與非靜態(tài)類的重要區(qū)別在于靜態(tài)類不能實(shí)例化,也就是說,不能使用 new 關(guān)鍵字創(chuàng)建靜態(tài)類類型的變量。在聲明一個類時使用static關(guān)鍵字,具有兩個方面的意義:首先,它防止程序員寫代碼來實(shí)例化該靜態(tài)類;其次,它防止在類的內(nèi)部聲明任何實(shí)例字段或方法。
靜態(tài)類的主要特性:
1:僅包含靜態(tài)成員。
2:無法實(shí)例化。
3:靜態(tài)類的本質(zhì),是一個抽象的密封類,所以不能被繼承,也不能被實(shí)例化。
4:不能包含實(shí)例構(gòu)造函數(shù)。
5:如果一個類下面的所有成員,都需要被共享,那么可以把這個類定義為靜態(tài)類。
靜態(tài)類與私有構(gòu)造函數(shù)區(qū)別:
1、私有構(gòu)造器方式仍然可以從類的內(nèi)部對類進(jìn)行實(shí)例化,而靜態(tài)類禁止從任何地方實(shí)例化類,其中包括從類自身內(nèi)部。
2、使用私有構(gòu)造器的類中,是允許有實(shí)例成員的,編譯器不允許靜態(tài)類有任何實(shí)例成員。
3、使用靜態(tài)類的優(yōu)點(diǎn)在于,編譯器能夠執(zhí)行檢查以確保不致偶然地添加實(shí)例成員,編譯器將保證不會創(chuàng)建此 類的實(shí)例。
4、C#編譯器會自動把它標(biāo)記為sealed。這個關(guān)鍵字將類指定為不可擴(kuò)展;換言之,不能從它派生出其他類。
二、靜態(tài)變量
1、通過static關(guān)鍵字修飾,是屬于類,實(shí)例成員屬于對象,在這個類第一次加載的時候,這個類下面的所有靜態(tài)成員會被加載。
2、靜態(tài)成員只被創(chuàng)建一次,所以靜態(tài)成員只有一份,實(shí)例成員有多少個對象,就有多少份。
3、類加載的時候,所有的靜態(tài)成員就會被創(chuàng)建在“靜態(tài)存儲區(qū)”里面,一旦創(chuàng)建直到程序退出,才會被回收。
4、變量需要被共享的時候,方法需要被反復(fù)調(diào)用的時候,就可以把這些成員定義為靜態(tài)成員。
5、在靜態(tài)方法中,不能直接調(diào)用實(shí)例成員,因?yàn)殪o態(tài)方法被調(diào)用的時候,對象還有可能不存在。
6、this/base 關(guān)鍵字在靜態(tài)方法中不能使用,因?yàn)橛锌赡軐ο筮€不存在。
7、可以創(chuàng)建這個類的對象,制定對象的成員在靜態(tài)方法中操作。
8、在實(shí)例方法中,可以調(diào)用靜態(tài)成員,因?yàn)檫@個時候靜態(tài)成員肯定存在。
9、非靜態(tài)類可以包含靜態(tài)的方法、字段、屬性或事件;
10、無論對一個類創(chuàng)建多少個實(shí)例,它的靜態(tài)成員都只有一個副本;
11、靜態(tài)方法和屬性不能訪問其包含類型中的非靜態(tài)字段和事件,并且不能訪問任何對象的實(shí)例變量;
12、靜態(tài)方法只能被重載,而不能被重寫,因?yàn)殪o態(tài)方法不屬于類的實(shí)例成員;
13、雖然字段不能聲明為 static const,但 const 字段的行為在本質(zhì)上是靜態(tài)的。這樣的字段屬于類,不屬于類的實(shí)例。
三、靜態(tài)方法
靜態(tài)方法是不屬于特定對象的方法,
靜態(tài)方法可以訪問靜態(tài)成員變量,
靜態(tài)方法不可以直接訪問實(shí)例變量,可以在實(shí)例函數(shù)調(diào)用的情況下,實(shí)例變 量做為參數(shù)傳給靜態(tài)方法。
靜態(tài)方法也不能直接調(diào)用實(shí)例方法,可以間接調(diào)用,首先要創(chuàng)建一個類的實(shí)例,然后通過這一特定對象來調(diào)用靜態(tài)方法。
四、靜態(tài)構(gòu)造函數(shù)
1:靜態(tài)類可以有靜態(tài)構(gòu)造函數(shù),靜態(tài)構(gòu)造函數(shù)不可繼承;
2:靜態(tài)構(gòu)造函數(shù)可以用于靜態(tài)類,也可用于非靜態(tài)類;
3:靜態(tài)構(gòu)造函數(shù)無訪問修飾符、無參數(shù),只有一個 static 標(biāo)志;
4:靜態(tài)構(gòu)造函數(shù)不可被直接調(diào)用,當(dāng)創(chuàng)建類實(shí)例或引用任何靜態(tài)成員之前,靜態(tài)構(gòu)造函數(shù)被自動執(zhí)行,并且只執(zhí)行一次。
例如
{
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)存儲區(qū),i=0,接著調(diào)用了類的成員,這時候靜態(tài)構(gòu)造函數(shù)就會被調(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í)行一次,所以不會再執(zhí)行。
}
}
希望本文所述對大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
C#由當(dāng)前日期計(jì)算相應(yīng)的周一和周日的實(shí)例代碼
這篇文章介紹了C#由當(dāng)前日期計(jì)算相應(yīng)的周一和周日的實(shí)例代碼,有需要的朋友可以參考一下2013-09-09
基于C#實(shí)現(xiàn)將圖片轉(zhuǎn)換為PDF文檔
將圖片(JPG、PNG)轉(zhuǎn)換為PDF文件可以幫助我們更好地保存和分享圖片,所以本文將介紹如何使用C#將JPG/PNG圖片轉(zhuǎn)換為PDF文檔,需要的可以參考下2024-12-12
C#使用開源驅(qū)動連接操作MySQL數(shù)據(jù)庫
這篇文章主要介紹了C#使用開源驅(qū)動連接操作MySQL數(shù)據(jù)庫,本文講解使用SourceForge上的mysqldrivercs驅(qū)動連接操作MySQL數(shù)據(jù)庫,需要的朋友可以參考下2015-02-02
c#關(guān)于JWT跨域身份驗(yàn)證的實(shí)現(xiàn)代碼
這篇文章主要介紹了c#關(guān)于JWT跨域身份驗(yàn)證的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10

