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

C# 如何将参数传递给静态类构造函数?,c#,class,static,static-classes,static-constructor,C#,Class,Static,Static Classes,Static Constructor,我有一个带有静态构造函数的静态类。我需要以某种方式向这个静态类传递一个参数,但我不确定最好的方法是什么。 你推荐什么 public static class MyClass { static MyClass() { DoStuff("HardCodedParameter") } } 不要使用静态构造函数,而是使用静态初始化方法: public class A { private static string ParamA { get; set; }

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

public static class MyClass {

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

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

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

    public static void Init(string paramA)
    {
        ParamA = paramA;
    }
}
在C#中,静态构造函数是无参数的,很少有方法可以克服这一限制。一个是我在上面向您提出的建议。

根据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;
  } 
}
静态构造函数具有以下属性:

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

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

此外,您还可以使用静态只读属性。

您可能因为错误的原因而将其设置为
static
。第一个问题是:为什么这个类是静态的?很少应该这样。但是,既然有一个setter可用,那么使用方法的意义何在…@meJustAndrew,因为该setter是
私有的
。你注意到那个重要的细节了吗D@meJustAndrew也许另一种方法是
ParamA{private get;set;}
。。。顺便说一句,这只是一个代码片段,表明您将使用一个或多个参数初始化静态类。可能一元构造函数是无用的,但如果您想涵盖将其提供给某个委托的用例,那么它仍然是有用的……事实上,我没有注意到该属性是
私有的
。我试图找到一种从类外初始化静态只读字段的方法,因此我找到了您的答案。不幸的是,目前在C#中似乎没有这样的机制。再次抱歉,以上评论都是我的错@meJustAndrew没问题:D无论如何,您可以模拟您想要的,提供一个
惰性
实例,而不是值方法
Create
应该是
public
来调用并初始化
StaticClass