C# 如何在类外调用静态构造函数?
我在采访中被问到:C# 如何在类外调用静态构造函数?,c#,.net,static,C#,.net,Static,我在采访中被问到: public class Test { static Test(){} } public class Class1 { //Call static constructor Here } 我试图在基类构造函数中调用静态构造函数。但这似乎不是正确的方向。怎么做?不能调用静态构造函数,也不能指定其可见性(public) 从: 将自动调用静态构造函数来初始化该类 在创建第一个实例或创建任何静态成员之前 参考 静态构造函数不能被显式调用,它们在创建第一个实例之前就
public class Test
{
static Test(){}
}
public class Class1
{
//Call static constructor Here
}
我试图在基类构造函数中调用静态构造函数。但这似乎不是正确的方向。怎么做?不能调用静态构造函数,也不能指定其可见性(
public
)
从:
将自动调用静态构造函数来初始化该类
在创建第一个实例或创建任何静态成员之前
参考
静态构造函数不能被显式调用,它们在创建第一个实例之前就被初始化了,因此无法向Microsoft状态发送参数 不能直接调用静态构造函数
引用静态构造函数在使用类之前自动调用,不应该手动调用,因此正确的答案是在
测试
类上执行以下操作:
public class Class1
{
public void CallStaticConstructorHere()
{
new Test();
}
}
但是99%的时候你不应该在意,运行时会在需要时调用它
在某些情况下(比如在启动期间强制进行一些初始化,以便在应用程序使用期间或在某些单元测试的设置中不会发生初始化),您可能需要强制进行初始化
该类提供以下功能:
public class Class1
{
public void CallStaticConstructorHere()
{
RuntimeHelpers.RunClassConstructor(typeof(Test).TypeHandle);
}
}
PS:RunClassConstructor的名称RunClassConstructor
有误导性,它只有在尚未运行时才运行它
PS(2):我不知道确切的问题是什么,但是如果面试官说的是基类构造函数(Class1:Test
),那是没有用的,因为如果没有基类静态构造函数的调用,派生类中的任何代码都不会被调用。这很容易
虽然您不能直接调用静态构造函数(众所周知),但您可以确定它的名称。。。通过从…访问该类。。静态构造函数(如果没有访问该类的其他静态构造函数,则应使语句
在此处调用静态构造函数
有效)静态构造函数隐式调用,当您访问任何静态属性或方法或创建实例时。访问该类的任何其他静态成员或创建该类的实例,如果没有其他原因导致该类已发生,则将调用静态构造函数。您不需要强制执行此操作。RuntimeHelpers.RunClassConstructor的+1到VBFox
public class Test
{
static Test(){}
}
public class Class1
{
//Call static constructor Here
static Class1()
{
// yes sir!
var test = new Test();
}
}