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 ah crap, я читал раздел о статических классах. Я хотел процитировать часть, которая говорила: «Выполнение статического конструктора запускается первым из следующих событий, которые происходят в домене приложения: Создан экземпляр класса». но это не класс. – vcsjones

Смежные вопросы