欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#靜態(tài)static的用法實(shí)例分析

 更新時(shí)間:2014年10月22日 08:51:16   投稿:shichen2014  
這篇文章主要介紹了C#靜態(tài)static的用法,以實(shí)例形式較為深入的分析了靜態(tài)類、靜態(tài)變量、靜態(tài)方法以及靜態(tài)構(gòu)造函數(shù)的特性與用法,需要的朋友可以參考下

本文實(shí)例講述了C#靜態(tài)static的用法,分享給大家供大家參考。具體用法分析如下:

一、靜態(tài)類

靜態(tài)類與非靜態(tài)類的重要區(qū)別在于靜態(tài)類不能實(shí)例化,也就是說(shuō),不能使用 new 關(guān)鍵字創(chuàng)建靜態(tài)類類型的變量。在聲明一個(gè)類時(shí)使用static關(guān)鍵字,具有兩個(gè)方面的意義:首先,它防止程序員寫(xiě)代碼來(lái)實(shí)例化該靜態(tài)類;其次,它防止在類的內(nèi)部聲明任何實(shí)例字段或方法。

靜態(tài)類的主要特性:

1:僅包含靜態(tài)成員。

2:無(wú)法實(shí)例化。

3:靜態(tài)類的本質(zhì),是一個(gè)抽象的密封類,所以不能被繼承,也不能被實(shí)例化。

4:不能包含實(shí)例構(gòu)造函數(shù)。

5:如果一個(gè)類下面的所有成員,都需要被共享,那么可以把這個(gè)類定義為靜態(tài)類。

靜態(tài)類與私有構(gòu)造函數(shù)區(qū)別:

1、私有構(gòu)造器方式仍然可以從類的內(nèi)部對(duì)類進(jìn)行實(shí)例化,而靜態(tài)類禁止從任何地方實(shí)例化類,其中包括從類自身內(nèi)部。

2、使用私有構(gòu)造器的類中,是允許有實(shí)例成員的,編譯器不允許靜態(tài)類有任何實(shí)例成員。

3、使用靜態(tài)類的優(yōu)點(diǎn)在于,編譯器能夠執(zhí)行檢查以確保不致偶然地添加實(shí)例成員,編譯器將保證不會(huì)創(chuàng)建此 類的實(shí)例。

4、C#編譯器會(huì)自動(dòng)把它標(biāo)記為sealed。這個(gè)關(guān)鍵字將類指定為不可擴(kuò)展;換言之,不能從它派生出其他類。

二、靜態(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ì)被回收。

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)成員肯定存在。

9、非靜態(tài)類可以包含靜態(tài)的方法、字段、屬性或事件;
10、無(wú)論對(duì)一個(gè)類創(chuàng)建多少個(gè)實(shí)例,它的靜態(tài)成員都只有一個(gè)副本;
11、靜態(tài)方法和屬性不能訪問(wèn)其包含類型中的非靜態(tài)字段和事件,并且不能訪問(wèn)任何對(duì)象的實(shí)例變量;
12、靜態(tài)方法只能被重載,而不能被重寫(xiě),因?yàn)殪o態(tài)方法不屬于類的實(shí)例成員;
13、雖然字段不能聲明為 static const,但 const 字段的行為在本質(zhì)上是靜態(tài)的。這樣的字段屬于類,不屬于類的實(shí)例。

三、靜態(tài)方法

靜態(tài)方法是不屬于特定對(duì)象的方法,

靜態(tài)方法可以訪問(wèn)靜態(tài)成員變量,

靜態(tài)方法不可以直接訪問(wèn)實(shí)例變量,可以在實(shí)例函數(shù)調(diào)用的情況下,實(shí)例變 量做為參數(shù)傳給靜態(tài)方法。

靜態(tài)方法也不能直接調(diào)用實(shí)例方法,可以間接調(diào)用,首先要?jiǎng)?chuàng)建一個(gè)類的實(shí)例,然后通過(guò)這一特定對(duì)象來(lái)調(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ù)無(wú)訪問(wèn)修飾符、無(wú)參數(shù),只有一個(gè) static 標(biāo)志;
4:靜態(tài)構(gòu)造函數(shù)不可被直接調(diào)用,當(dāng)創(chuàng)建類實(shí)例或引用任何靜態(tài)成員之前,靜態(tài)構(gòu)造函數(shù)被自動(dòng)執(zhí)行,并且只執(zhí)行一次。

例如

復(fù)制代碼 代碼如下:
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í)行。
        }
}

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論