2015-12-11 30 views
10

Ho una classe statica con un costruttore statico. Ho bisogno di passare un parametro in qualche modo a questa classe statica, ma non sono sicuro di come sia il modo migliore. Cosa consiglieresti?Come passare il parametro al costruttore di classi statiche?

public static class MyClass { 

    static MyClass() { 
     DoStuff("HardCodedParameter") 
    } 
} 
+2

Probabilmente lo hai reso 'statico' per i motivi sbagliati. Riprogettare. –

+0

La prima domanda è davvero: perché questa classe è statica? Raramente dovrebbe essere. –

risposta

16

Non utilizzare un costruttore statico, ma un metodo di inizializzazione statico:

public class A 
{ 
    private static string ParamA { get; set; } 

    public static void Init(string paramA) 
    { 
     ParamA = paramA; 
    } 
} 

In C#, costruttori statici sono senza parametri, e non vi siete alcuni approcci per superare questa limitazione. Uno è quello che ti ho suggerito sopra.

0

Come da MSDN, A static constructor is called automatically to initialize the class before the first instance is created. Pertanto non è possibile inviarlo alcun parametro.

CLR deve chiamare un costruttore statico come saprà quali parametri passarlo?

Quindi non utilizzare un costruttore statico.

Ecco il lavoro intorno per le vostre esigenze.

public class StaticClass 
{ 
    private int bar; 
    private static StaticClass _foo; 

    private StaticClass() {} 

    static StaticClass Create(int initialBar) 
    { 
    _foo = new StaticClass(); 
    _foo.bar = initialBar; 
    return _foo; 
    } 
} 

costruttori statici hanno le seguenti proprietà:

  • Un costruttore statico non prende modificatori di accesso o hanno parametri. Un costruttore statico viene chiamato automaticamente su inizializzare la classe prima che venga creata la prima istanza o qualsiasi riferimento a membri statici statici.
  • Un costruttore statico non può essere chiamato direttamente.
  • L'utente non ha alcun controllo su quando il costruttore statico viene eseguito nel programma.
  • Un tipico utilizzo dei costruttori statici è quando la classe utilizza un file di registro e il costruttore viene utilizzato per scrivere le voci in questo file.
  • I costruttori statici sono utili anche quando si creano classi wrapper per codice non gestito, quando il costruttore può chiamare il metodo LoadLibrary .
  • Se un costruttore statico genera un'eccezione, il runtime non la invocherà una seconda volta e il tipo rimarrà non inizializzato per la durata del dominio dell'applicazione in cui è in esecuzione il programma .
0

Se per "HardCodedParameter" davvero dire difficile codificato, è possibile utilizzare le costanti.

public static class YoursClass 
{ 
    public const string AnotherHardCodedParam = "Foo"; 
} 

public static class MyClass 
{ 
    private const string HardCodedParam = "FooBar"; 

    static MyClass() 
    { 
     DoStuff(MyClass.HardCodedParam); 
     DoStuff(YoursClass.AnotherHardCodedParam); 
    } 
} 

Inoltre, è possibile utilizzare le proprietà statiche di sola lettura.