C#靜態(tài)static的用法實例分析
本文實例講述了C#靜態(tài)static的用法,分享給大家供大家參考。具體用法分析如下:
一、靜態(tài)類
靜態(tài)類與非靜態(tài)類的重要區(qū)別在于靜態(tài)類不能實例化,也就是說,不能使用 new 關鍵字創(chuàng)建靜態(tài)類類型的變量。在聲明一個類時使用static關鍵字,具有兩個方面的意義:首先,它防止程序員寫代碼來實例化該靜態(tài)類;其次,它防止在類的內(nèi)部聲明任何實例字段或方法。
靜態(tài)類的主要特性:
1:僅包含靜態(tài)成員。
2:無法實例化。
3:靜態(tài)類的本質(zhì),是一個抽象的密封類,所以不能被繼承,也不能被實例化。
4:不能包含實例構(gòu)造函數(shù)。
5:如果一個類下面的所有成員,都需要被共享,那么可以把這個類定義為靜態(tài)類。
靜態(tài)類與私有構(gòu)造函數(shù)區(qū)別:
1、私有構(gòu)造器方式仍然可以從類的內(nèi)部對類進行實例化,而靜態(tài)類禁止從任何地方實例化類,其中包括從類自身內(nèi)部。
2、使用私有構(gòu)造器的類中,是允許有實例成員的,編譯器不允許靜態(tài)類有任何實例成員。
3、使用靜態(tài)類的優(yōu)點在于,編譯器能夠執(zhí)行檢查以確保不致偶然地添加實例成員,編譯器將保證不會創(chuàng)建此 類的實例。
4、C#編譯器會自動把它標記為sealed。這個關鍵字將類指定為不可擴展;換言之,不能從它派生出其他類。
二、靜態(tài)變量
1、通過static關鍵字修飾,是屬于類,實例成員屬于對象,在這個類第一次加載的時候,這個類下面的所有靜態(tài)成員會被加載。
2、靜態(tài)成員只被創(chuàng)建一次,所以靜態(tài)成員只有一份,實例成員有多少個對象,就有多少份。
3、類加載的時候,所有的靜態(tài)成員就會被創(chuàng)建在“靜態(tài)存儲區(qū)”里面,一旦創(chuàng)建直到程序退出,才會被回收。
4、變量需要被共享的時候,方法需要被反復調(diào)用的時候,就可以把這些成員定義為靜態(tài)成員。
5、在靜態(tài)方法中,不能直接調(diào)用實例成員,因為靜態(tài)方法被調(diào)用的時候,對象還有可能不存在。
6、this/base 關鍵字在靜態(tài)方法中不能使用,因為有可能對象還不存在。
7、可以創(chuàng)建這個類的對象,制定對象的成員在靜態(tài)方法中操作。
8、在實例方法中,可以調(diào)用靜態(tài)成員,因為這個時候靜態(tài)成員肯定存在。
9、非靜態(tài)類可以包含靜態(tài)的方法、字段、屬性或事件;
10、無論對一個類創(chuàng)建多少個實例,它的靜態(tài)成員都只有一個副本;
11、靜態(tài)方法和屬性不能訪問其包含類型中的非靜態(tài)字段和事件,并且不能訪問任何對象的實例變量;
12、靜態(tài)方法只能被重載,而不能被重寫,因為靜態(tài)方法不屬于類的實例成員;
13、雖然字段不能聲明為 static const,但 const 字段的行為在本質(zhì)上是靜態(tài)的。這樣的字段屬于類,不屬于類的實例。
三、靜態(tài)方法
靜態(tài)方法是不屬于特定對象的方法,
靜態(tài)方法可以訪問靜態(tài)成員變量,
靜態(tài)方法不可以直接訪問實例變量,可以在實例函數(shù)調(diào)用的情況下,實例變 量做為參數(shù)傳給靜態(tài)方法。
靜態(tài)方法也不能直接調(diào)用實例方法,可以間接調(diào)用,首先要創(chuàng)建一個類的實例,然后通過這一特定對象來調(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 標志;
4:靜態(tài)構(gòu)造函數(shù)不可被直接調(diào)用,當創(chuàng)建類實例或引用任何靜態(tài)成員之前,靜態(tài)構(gòu)造函數(shù)被自動執(zhí)行,并且只執(zhí)行一次。
例如
{
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í)行。
}
}
希望本文所述對大家的C#程序設計有所幫助。
相關文章
基于C#實現(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

