2015-12-11 3 views
10

У меня есть статический класс со статическим конструктором. Мне нужно каким-то образом передать параметр этому статическому классу, но я не уверен, как наилучшим образом. Что вы посоветуете?Как передать параметр в static class constructor?

public static class MyClass { 

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

Возможно, вы сделали это «статическим» по неправильным причинам. Редизайн. –

+0

Первый вопрос: почему этот класс статичен? Редко это должно быть. –

ответ

16

Не используйте статический конструктор, но статический метод инициализации:

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

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

В C#, статические конструкторы без параметров, а там уже несколько подходов к преодолению этого ограничения. Одно из того, что я предложил вам выше.

0

Согласно MSDN, A static constructor is called automatically to initialize the class before the first instance is created. Поэтому вы не можете отправить ему какие-либо параметры.

CLR должен вызвать статический конструктор, как он узнает, какие параметры передать его?

Поэтому не используйте статический конструктор.

Вот работа для вашего требования.

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

Статические конструкторы обладают следующими свойствами:

  • Статический конструктор не принимает модификаторы доступа или имеют параметры. Статический конструктор автоматически вызывается в , инициализируя класс до создания первого экземпляра или ссылается на статические элементы .
  • Статический конструктор нельзя вызвать напрямую.
  • Пользователь не может контролировать, когда статический конструктор выполняется в программе.
  • Типичное использование статических конструкторов - это когда класс использует файл журнала, а конструктор используется для записи записей в этот файл.
  • Статические конструкторы также полезны при создании классов-оболочек для неуправляемого кода, когда конструктор может вызвать метод LoadLibrary .
  • Если статический конструктор создает исключение, среда выполнения не будет вызывать его второй раз, и тип останется неинициализированным для времени жизни домена приложения, в котором работает ваша программа .
0

Если под «HardCodedParameter» вы на самом деле означает жёстко, вы можете использовать константы.

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

Кроме того, вы можете использовать статические свойства readonly.

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

  • Нет связанных вопросов^_^