[C#]C#補習——靜態建構函式、靜態成員和常量相關

來源:互聯網
上載者:User

       上一篇補習了類和方法,這一篇補習下類中一些靜態成員和常量。

以下是本文所要介紹的內容:

1、靜態建構函式

2、靜態成員與常量

 

一、靜態建構函式

     前段時間經常看到園子裡有朋友發麵試題,其中比較有代表性的就是靜態建構函式了,有興趣的朋友可以搜尋下看看,我這邊也就順便補習下靜態建構函式的知識:

1、靜態建構函式永遠優先與其他建構函式。

2、靜態建構函式是在首次訪問所在類的第一個成員時進行的,並且只會執行一次。

3、靜態建構函式沒有參數,不需要任何存取修飾詞,有.NET runtime運行。

4、類中一旦包含靜態建構函式,那麼編譯器會自動插入一段檢查代碼負責檢查所有靜態成員和構造,以確保其優先運行。

所以在瞭解了以上知識後再看下面的代碼就會清楚很多:

class Class1    {        public static string str = "fsdafdsa";        public static readonly Class1 anobject = new Class1();        static Class1()        {            System.Console.WriteLine("靜態建構函式調用");        }        private Class1()        {        }        public static Class1 c()        {            return new Class1();        }    }static void Main(string[] args)    {         string s = Class1.str;         Class1 temp =Class1.c();                         Console.WriteLine("程式開始");         Console.ReadLine();     }

結果輸出時,字串“靜態建構函式調用”會第一個被輸出,這是因為string s = Class1.str; 這句代碼已經訪問了類中的成員了,符合上面的第2條。

 

二、靜態成員與常量

     對於類來說,一個類中可以包含許多成員,而且大部分成員都可以是靜態,比如:變數、屬性、方法等。同樣需要注意的有以下幾點:

1、如果不包含靜態建構函式,那麼靜態欄位會在訪問類的任何靜態欄位時候進行初始化及賦值。

2、除非需要訪問一個靜態欄位,否則不必對靜態成員進行初始化。

3、對於靜態類,在IL的最終標記為abstract和sealed。

 

在為欄位設定是否為常量(const)或唯讀(readonly)時,需要注意:

1、const常量會在編譯時間就固定,所以常量建議是不會更改的變數,否則如果一旦發生更改且沒有重新編譯那麼程式訪問的還是老的值,所以對於可能會更改的值還是設定為readonly。

2、當將變數數組設定為readonly的時候,其數組的長度是無法更改的,但是其中的值是可以更改的。

3、應用了readonly的變數可以在建構函式中對其變更。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.