C#静态垃圾收集器?

A.P*_*P.S 4 .net c# constructor garbage-collection static-constructor

我有一个简单的类,它有一个静态构造函数和一个实例构造函数.现在,当我初始化类时,调用静态和实例构造函数.在应用程序域中只引用一次静态.我可以再次调用相同的类初始化和静态构造函数再次初始化吗?我试过但它没有发生?有没有什么办法可以在类上使用垃圾收集后在main()方法中再次调用静态构造函数.

这是代码:

public class Employee
{
    public Employee()
    {
        Console.WriteLine("Instance constructor called");   
    }

    static Employee()
    {
        Console.WriteLine("Static constructor called");   
    }

    ~Employee()
     {
        //Dispose();
     }
}
Run Code Online (Sandbox Code Playgroud)

现在在main方法调用中:

static void Main(string[] args)
{
    Employee emp = new Employee();
    Employee emp = new Employee();
}
Run Code Online (Sandbox Code Playgroud)

输出:

名为Instance构造函数的静态构造函数称为Instance构造函数

现在静态没有再次调用.因为它在应用程序域中被调用一次.但他们是否可以在不卸载应用程序域的情况下再次调用它.我们可以在这里使用GC类吗?

谢谢.朋友

Jon*_*eet 8

除非你使用反射来刺激它,否则静态构造函数(或更一般地说,类型初始化程序)仅针对每个AppDomain的具体类执行一次.

请注意,对于泛型,使用不同的类型参数,您将获得不同的具体类:

public class Foo<T>
{
    Foo()
    {
        Console.WriteLine("T={0}", typeof(T));
    }
    public static void DummyMethod() {}
}
...
Foo<int>.DummyMethod(); // Executes static constructor first
Foo<string>.DummyMethod(); // Executes static constructor first
Foo<string>.DummyMethod(); // Type is already initialized; no more output
Run Code Online (Sandbox Code Playgroud)