根据 MSDN:
静态构造函数不需要访问修饰符或参数。
静态构造函数会在创建第一个实例或引用任何静态成员之前自动调用以初始化类。
不能直接调用静态构造函数。
请问为什么静态构造函数不能有参数呢?
根据 MSDN:
静态构造函数不需要访问修饰符或参数。
静态构造函数会在创建第一个实例或引用任何静态成员之前自动调用以初始化类。
不能直接调用静态构造函数。
请问为什么静态构造函数不能有参数呢?
根据MSDN的说法,静态构造函数会在创建第一个实例之前自动调用以初始化类。因此,您无法向其发送任何参数。
如果CLR必须调用静态构造函数,它将如何知道要传递哪些参数?
静态构造函数是类型初始化的一部分自动调用的。它们不是显式调用...因此,你无法提供任何参数来对应构造函数参数。如果永远无法为参数指定值,为什么要允许参数呢?
class Sample
{
int a;
int b;
static Sample(int a1=10, int b1=20)
{
this.a = a1;
this.b = b1;
}
}
class Sample
{
int a;
int b;
static Sample()
{
this.a = 10;
this.b = 20;
}
}
static class DataB
{
static DataB(){}
public static void funcWithParams(string st)
{...}
}
你可以像这样创建它:
DataB.funcWithParams("some string");
静态构造函数
由于静态构造函数是自动调用的(我们无法控制静态构造函数的调用),因此我们无法向静态构造函数传递参数。
如果我们无法向静态构造函数传递参数,那么为什么要创建带参数的静态构造函数呢?
因此,我们必须拥有无参数的静态构造函数。
new Foo(x)
不是对构造函数的显式调用,而是在由new
返回的内存上调用构造函数。 - Motti