公共构造函数和静态构造函数

Str*_*007 16 c# static-constructor

我正在阅读使用两个构造函数的C#代码.一个是静态的,另一个是公开的.这两个构造函数有什么区别?为了我们必须使用静态构造函数?

Kon*_*lph 31

static并且public是正交概念(即它们彼此之间没有任何关系).

public只是意味着类的用户可以调用该构造函数(而不是说private).

static意味着该方法(在本例中为构造函数)不属于类的实例,而属于"类本身".特别是,当第一次使用类时,静态构造函数会自动调用一次.

此外,静态构造不能进行publicprivate,因为它不能被手动地调用; 它仅由.NET运行时本身调用 - 因此将其标记为public没有意义.


Ond*_*ták 24

在实例化类之前,静态构造函数只运行一次.如果你想要一次只发生一次,它就被使用了.一个很好的例子是Bus类(类似于他们在MSDN文章中解释的内容):

public class Bus
{
    public static int busNo = 0;

    static Bus()
    {
        Console.WriteLine("Woey, it's a new day! Drivers are starting to work.");
    }

    public Bus()
    {
        busNo++;

        Console.WriteLine("Bus #{0} goes from the depot.", busNo);
    }
}


class Program
{
    static void Main(string[] args)
    {
        Bus busOne = new Bus();
        Bus busTwo = new Bus();
    }

    // Output:
    // Woey, it's a new day! Drivers are starting to work.
    // Bus #1 goes from the depot.
    // Bus #2 goes from the depot.
}
Run Code Online (Sandbox Code Playgroud)