何时以及谁创建静态类的实例?

时间:2017-06-15 03:13:50

标签: c#

最近我在采访中被问到了一个问题。

采访者问下面的问题

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

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

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

2 个答案:

答案 0 :(得分: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!");
    }
}

打印以下内容:

Not instantiated yet!
Instantiated!
A was called!

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

答案 1 :(得分:1)

无法实例化静态类。换句话说,您不能使用new关键字来创建类类型的变量。因为没有实例变量,所以可以使用类名本身来访问静态类的成员。

以下列表提供了静态类的主要功能:

  • 仅包含静态成员。
  • 无法实例化。
  • 密封。
  • 不能包含实例构造函数。