6

Env .: C# 6, Visual Studio 2015 CTP 6costruttore statico non funziona per le strutture

Dato il seguente esempio:

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(); 
     } 
    } 

}

Il ctor statico non è in esecuzione per qualche ragione. Se dichiaro SavingsAccount come una classe invece di una struct, funziona perfettamente.

+0

Controlla [questo collegamento] (http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx) su come impostare i costruttori senza parametri nelle strutture. –

risposta

13

Il costruttore statico non viene eseguito perché non si utilizzano membri statici della struct.

Se si utilizza il membro statico currInterestRate, quindi il costruttore statico viene chiamato per primo:

Console.WriteLine(SavingsAccount.currInterestRate); 

uscita:

static ctor of SavingsAccount 
0,06 

Quando si utilizza una classe, il costruttore statico sarà chiamato prima l'istanza è creata. Chiamare un costruttore per una struttura non crea un'istanza, quindi non attiva il costruttore statico.

+0

@vcsjones Quale membro statico crea un'istanza dell'istanza nell'esempio? – Matthew

+0

@Matthew ah crap, stavo leggendo la sezione sulle classi statiche. Intendevo citare la parte che diceva: "L'esecuzione di un costruttore statico viene attivata dal primo degli eventi seguenti che si verificano all'interno di un dominio dell'applicazione: Un'istanza della classe viene creata." ma questa non è una classe. – vcsjones

Problemi correlati