如何将参数传递给静态类构造函数?

MrP*_*ram 21 c# static class static-constructor static-classes

我有一个带有静态构造函数的静态类.我需要以某种方式将参数传递给这个静态类,但我不确定最好的方法是什么.你会推荐什么?

public static class MyClass {

    static MyClass() {
        DoStuff("HardCodedParameter")
    }
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*zer 31

不要使用静态构造函数,而是使用静态初始化方法:

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

    public static void Init(string paramA)
    {
        ParamA = paramA;
    }
}
Run Code Online (Sandbox Code Playgroud)

在C#中,静态构造函数是无参数的,并且很少有方法可以克服这个限制.一个是我上面建议你的.

  • @meJustAndrew 因为该设置器是“私有”的。你注意到这个重要的细节了吗?:D (2认同)

Rah*_*ate 7

根据 MSDN,在创建第一个实例之前,会自动调用静态构造函数来初始化类。因此你不能发送任何参数。

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;
  } 
}
Run Code Online (Sandbox Code Playgroud)

静态构造函数具有以下属性:

  • 静态构造函数不接受访问修饰符或参数。在创建第一个实例或引用任何静态成员之前,会自动调用静态构造函数来初始化类。
  • 不能直接调用静态构造函数。
  • 用户无法控制程序中何时执行静态构造函数。
  • 静态构造函数的典型用途是当类使用日志文件并且构造函数用于将条目写入该文件时。
  • 在为非托管代码创建包装类时,当构造函数可以调用 LoadLibrary 方法时,静态构造函数也很有用。
  • 如果静态构造函数抛出异常,运行时将不会再次调用它,并且该类型将在您的程序运行所在的应用程序域的生命周期内保持未初始化状态。