有人问我在采访时说:如何在类之外调用静态构造函数?
public class Test
{
static Test(){}
}
public class Class1
{
//Call static constructor Here
}
我想调用基类的构造函数中静态构造函数。但这似乎并不正确。你怎么做呢?
有人问我在采访时说:如何在类之外调用静态构造函数?
public class Test
{
static Test(){}
}
public class Class1
{
//Call static constructor Here
}
我想调用基类的构造函数中静态构造函数。但这似乎并不正确。你怎么做呢?
静态构造函数没有被显式调用,在创建第一个实例之前,因此不能被发送的参数
它们被初始化静态构造函数类的任何使用前被自动调用,不应该因此正确答案是做什么的Test
类像手动调用:
public class Class1
{
public void CallStaticConstructorHere()
{
new Test();
}
}
但99%的时间你不应该在意,运行时会在需要时调用它。
在某些情况下(如在启动过程中迫使一些初始化,使其不发生应用程序使用,或者在一些单元测试在安装过程中后者),你可能需要强制它。
类RuntimeHelpers
提供这种能力:
public class Class1
{
public void CallStaticConstructorHere()
{
RuntimeHelpers.RunClassConstructor(typeof(Test).TypeHandle);
}
}
PS:RunClassConstructor
是误导它运行它,只有当它尚未运行
PS(2)名称:我不t知道确切的问题,但是如果面试官讲的是基类构造函数(Class1 : Test
),那么它就没用了,因为如果没有在之前调用基类静态构造函数的情况下,将不会调用派生类中的任何代码。
对于RuntimeHelpers.RunClassConstructor的VBFox +1 – AlexH
这很容易。
虽然你不能直接调用静态构造函数(大家都知道),你可以知道什么是叫...通过访问这个类..静态构造函数(这将使声明call static constructor here
有效的,如果有什么访问该类别中没有其他静态构造函数)< <我可以从那些谁也不会明白写在括号= d趴下-票
public class Test
{
static Test(){}
}
public class Class1
{
//Call static constructor Here
static Class1()
{
// yes sir!
var test = new Test();
}
}
静态构造函数调用隐,当你访问任何静态属性或方法或创建实例时。 – vmeln
访问该类的任何其他静态成员,或创建该类的一个实例,并且*如果没有其他任何事情导致它已经发生*,则会调用静态构造函数。你永远不需要强迫这种事情发生。 –