2015-12-11 249 views
10

我有一个静态构造函数的静态类。我需要传递一个参数到这个静态类,但我不知道最好的方法是什么。 你会推荐什么?如何将参数传递给静态类构造函数?

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

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

相关问题