我有一个静态类和一个静态构造函数。我需要以某种方式将参数传递给这个静态类,但我不确定最佳方式是什么。 你有什么建议?
public static class MyClass {
static MyClass() {
DoStuff("HardCodedParameter")
}
}
我有一个静态类和一个静态构造函数。我需要以某种方式将参数传递给这个静态类,但我不确定最佳方式是什么。 你有什么建议?
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#中,静态构造函数是无参数的,有几种方法可以克服这个限制。其中一种是我上面建议过的。private
的。你注意到这个重要的细节了吗? :D - Matías FidemraizerParamA { private get; set; }
... 顺便说一下,这只是一个代码片段,用来展示如何使用一个或多个参数初始化静态类。可能一元构造函数没什么用,但如果你想覆盖将其提供给某些委托的用例,它仍然很有用... - Matías FidemraizerLazy<T>
实例而不是值,您就可以模拟所需的内容。 - Matías FidemraizerCLR必须调用静态构造函数,但它如何知道要传递哪些参数?
因此,请不要使用静态构造函数。
以下是满足您需求的解决方法。
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方法。
- 如果静态构造函数抛出异常,则运行时将不会再次调用它,并且该类型将在应用程序域的生存期内保持未初始化状态。
Create
应该是 public
,以便调用并初始化 StaticClass
。 - M.Hassanpublic 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);
}
}
此外,您还可以使用静态只读属性。
public static class MyClass
{
private static Form FormMain { get; set; }
public static void Init(Form initForm)
{
FormMain = initForm;
}
private static bool InitCheck()
{
return FormMain != null ? true: false;
}
public static void DoStuff()
{
if (InitCheck())
{
// Do your things
}
else
{
throw new Exception("Object reference not set to an instance of an object");
}
}
}