程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#靜態構造函數總結

C#靜態構造函數總結

編輯:C#入門知識

 今天花了一些時間把靜態構造函數的用法總結了一下,希望高手們指點。謝謝!
   

  • 靜態構造函數既沒有訪問修飾符,也沒有參數。

  • 如果沒有編寫靜態構造函數,而這時類中包含帶有初始值設定的靜態字段,那麼編譯器會自動生成默認的靜態構造函數。

  • 在創建第一個類實例或任何靜態成員被引用時,.NET將自動調用靜態構造函數來初始化類,也就是說我們無法直接調用靜態構造函數,也就無法控制什麼時候執行靜態構造函數了。

  • 如果類中包含用來開始執行的 Main 方法,則該類的靜態構造函數將在調用 Main 方法之前執行。

  • 如果類中的靜態字段帶有初始化,則靜態字段的初始化語句將在靜態構造函數之前運行。

  • 一個類只能有一個靜態構造函數。

  • 無參數的構造函數可以與靜態構造函數共存。盡管參數列表相同,但一個屬於類,一個屬於實例,所以不會沖突。

  • 最多只運行一次。

  • 靜態構造函數不可以被繼承。
     

  • 示例代碼如下:

     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Test
    {
        class Program
        {
            public static int X;
            //步驟2,因為在步驟1中調用了 Program.X,而在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數來初始化類。
             static Program()
            {
                X = B.Y + 1;         //此時B.Y=0;                 
                Console.WriteLine("static A()");
            }
        }
        class B
        {
            /*步驟1
            如果類中包含用來開始執行的 Main 方法,則該類的靜態構造函數將在調用 Main 方法之前執行。
             如果類中的靜態字段帶有初始化,則靜態字段的初始化語句將在靜態構造函數之前運行。*/
            public static int Y = Program.X + 1;
            static B()
            {
                Console.WriteLine("static B()");
            }
            static void Main()
            {
                Console.WriteLine("X = {0}, Y = {1}", Program.X, B.Y);  
                Console.ReadLine();                                     
            }
        }
    }

運行的結果是:

static A()

static B()

X=1,Y=2

    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved