6

信封:C#6時,Visual Studio 2015年CTP 6靜態構造函數不工作的結構

考慮下面的例子:

namespace StaticCTOR 
{ 
    struct SavingsAccount 
    { 
     // static members 

     public static double currInterestRate = 0.04; 

     static SavingsAccount() 
     { 
      currInterestRate = 0.06; 
      Console.WriteLine("static ctor of SavingsAccount"); 
     } 
     // 

     public double Balance; 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      SavingsAccount s1 = new SavingsAccount(); 

      s1.Balance = 10000; 

      Console.WriteLine("The balance of my account is \{s1.Balance}"); 

      Console.ReadKey(); 
     } 
    } 

}

靜態構造函數沒有被用於執行一些原因。如果我將SavingsAccount聲明爲一個類而不是一個結構,它就可以工作。

+0

查看[此鏈接](http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx)關於如何設置無參數構造函數在結構中。 –

回答

13

靜態構造函數未執行,因爲您沒有使用該結構的任何靜態成員。

如果使用靜態成員currInterestRate,那麼靜態構造函數首先被調用:

Console.WriteLine(SavingsAccount.currInterestRate); 

輸出:

static ctor of SavingsAccount 
0,06 

當您使用一個類,靜態構造函數將被調用之前該實例已創建。調用結構的構造函數不會創建實例,因此它不會觸發靜態構造函數。

+0

@vcsjones哪個靜態成員在示例中實例化一個實例? – Matthew

+0

@Matthew啊廢話,我正在閱讀關於靜態類的部分。我的意思是引用這樣的部分:「執行靜態構造函數是由在應用程序域中發生下列第一個事件觸發的: 創建類的實例。」但這不是一堂課。 – vcsjones