什么时候和谁创建静态类的实例?

Sim*_*mba 0 c#

最近我在面试中被问到一个问题.

采访者问下面的问题

- 什么时候和谁创建静态类的实例?清楚地创建实例意味着在内存中分配空间.如果不在内存中分配空间,我们就无法调用方法.

我很困惑因为根据我的知识,静态类不会创建实例所以我在互联网上搜索,我发现只有一次实例创建静态类,这是第一次调用第一个静态方法时.这是对的吗?

创建实例的第二个问题是什么?这是CLR吗?

Cli*_*int 5

静态"实例"实际上是第一次代码引用静态类时"实例化"(即,它们的静态构造函数被调用):

void Main()
{
    Console.WriteLine("Not instantiated yet!");
    Stat.A();
}

// Define other methods and classes here

static class Stat
{
    static Stat()
    {
        Console.WriteLine("Instantiated!");     
    }

    public static void A()
    {
        Console.WriteLine("A was called!");
    }
}
Run Code Online (Sandbox Code Playgroud)

打印以下内容:

Not instantiated yet!
Instantiated!
A was called!
Run Code Online (Sandbox Code Playgroud)

正如其他地方所提到的,这不是技术上的实例化,但它非常接近; 你只需要把它想象成实例存在于"其他地方"并且运行时为你管理它.

  • 即使在引号中也不要将它们命名为"实例".它只是一个静态类构造函数调用和字段初始化./sf/answers/1062439941/ (3认同)
  • 这是对"实例"一词的滥用.调用静态构造函数不构成实例化. (2认同)