如何在类外调用静态构造函数?

时间:2014-02-05 15:27:55

标签: c# .net static

我在接受采访时被问到:

public class Test
{
    static Test(){}
}

public class Class1 
{
    //Call static constructor Here
}

我试图在基类构造函数中调用静态构造函数。但这似乎并没有朝着正确的方向发展。你是怎么做到的?

5 个答案:

答案 0 :(得分:6)

您无法调用静态构造函数,也无法指定其可见性(public

来自documentation

  

自动调用静态构造函数来初始化类   在创建第一个实例之前或任何静态成员之前   引用。

答案 1 :(得分:2)

静态构造函数在任何类的使用之前自动调用,不应该手动调用,因此正确的答案是在Test类上执行某些操作,如:

public class Class1 
{
    public void CallStaticConstructorHere()
    {
        new Test();
    }
}

但99%的时间你不应该关心,运行时会在需要时调用它。

在某些情况下(比如在启动期间强制执行某些初始化以便在应用程序使用期间或在某些单元测试的SetUp中不会发生这种情况),您可能需要强制它。

班级RuntimeHelpers提供此功能:

public class Class1 
{
    public void CallStaticConstructorHere()
    {
        RuntimeHelpers.RunClassConstructor(typeof(Test).TypeHandle);
    }
}

PS:名称RunClassConstructor具有误导性,只有在尚未运行的情况下运行

PS(2):我不知道确切的问题但是如果面试官是在谈论基类构造函数(Class1 : Test)那么它是无用的,因为派生类中的代码不会被调用而没有之前调用的基类静态构造函数。

答案 2 :(得分:1)

静态构造函数不是显式调用的,它们是在创建第一个实例之前初始化的,因此无法发送参数

答案 3 :(得分:1)

微软声明

  

无法直接调用静态构造函数。

Referance here

答案 4 :(得分:0)

这很容易。

虽然你不能直接调用静态构造函数(因为每个人都知道),你可以通过从..静态构造函数访问该类来确定它的名称...(如果存在,则应该使语句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();
    }
}