靜態建構子用於初始化任何靜態數據,或執行特定的操作 需要翻譯的內容為:在首次呼叫之前自動執行的操作 實例被建立或任何靜態成員被引用時。
當為非託管程式碼建立包裝類別時,靜態建構子非常有用, 當建構函式可以呼叫LoadLibrary方法時。靜態建構函數也是如此 方便的地方來對無法進行運行時檢查的類型參數進行強制執行 在編譯時透過約束條件進行檢查。
靜態建構子具有以下屬性 −
靜態建構子不接受存取修飾符或參數。
一個類別或結構體只能有一個靜態建構子。
靜態建構子不能被繼承或重載。
靜態建構子不能直接調用,只能透過其他方法調用
使用者無法控制靜態建構子何時執行 程式.
靜態建構子在初始化類別之前自動調用 第一個實例被建立或引用任何靜態成員。一個靜態 建構函式將在實例建構函式之前運行。類型的靜態建構函數 當靜態方法分配給事件或委託並被呼叫時稱為 並且不是在被分配時。如果靜態字段變數初始化器存在於中 class of the static constructor, they will be executed in the textual order in 靜態建構函數的類,它們將按照文字順序執行 在執行之前,它們出現在類別聲明中 如果您不提供靜態建構函數來初始化靜態字段,則所有靜態字段將在首次訪問時按照其聲明順序自動初始化。
存在靜態建構子會阻止添加 BeforeFieldInit類型屬性。這限制了運行時優化。
一個宣告為static readonly的欄位只能作為其的一部分進行賦值 在宣告或靜態建構函數中。當沒有明確的靜態建構函數時 需要翻譯的內容為:required, initialize static fields at declaration, rather than through a static 需要翻譯的內容為:required, initialize static fields at declaration, rather than through a static 構造函數用於更好的運行時最佳化。
即時示範
using System; namespace DemoApplication{ public class Program{ static void Main(string[] args){ Car user = new Car(); Car user1 = new Car(); Console.ReadLine(); } } public class Car{ static Car(){ Console.WriteLine("Static constructor called"); } public Car(){ Console.WriteLine("Default constructor called"); } } }
Static constructor called Default constructor called Default constructor called
在上面的範例中,我們可以看到靜態建構子只被調用一次。
線上示範
using System; using System.Threading; namespace DemoApplication{ public class Car{ protected static readonly DateTime globalStartTime; protected int RouteNumber { get; set; } static Car(){ globalStartTime = DateTime.Now; Console.WriteLine($"Static constructor called. Global start time: {globalStartTime.ToLongTimeString()}"); } public Car(int routeNum){ RouteNumber = routeNum; Console.WriteLine($"Car {RouteNumber} is created."); } public void Drive(){ TimeSpan elapsedTime = DateTime.Now - globalStartTime; Console.WriteLine($"Car {this.RouteNumber} is starting its route {elapsedTime.Milliseconds} minutes after global start time {globalStartTime.ToShortTimeString()}."); } } class TestCar{ static void Main(){ Car car1 = new Car(1); Car car2 = new Car(2); car1.Drive(); Thread.Sleep(25); car2.Drive(); Console.ReadLine(); } } }
Static constructor called. Global start time: 7:09:06 AM Car 1 is created. Car 2 is created. Car 1 is starting its route25 minutes after global start time7:09 AM. Car 2 is starting its route50 minutes after global start time7:09 AM.
以上是C#中的靜態建構函數有什麼用途?的詳細內容。更多資訊請關注PHP中文網其他相關文章!