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

时间:2010-06-08 07:26:56

标签: c# static-constructor

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

5 个答案:

答案 0 :(得分:30)

staticpublic是正交概念(即它们彼此无关)。

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

static表示方法(在本例中为构造函数)不属于类的实例,而属于“类本身”。特别是,静态构造函数在第一次使用类时会自动调用一次

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

答案 1 :(得分:24)

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

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.
}

答案 2 :(得分:3)

静态构造函数...保证在应用程序/应用程序域的生命周期内“一次”调用它。它可以包含您只想执行一次的语句。

Public Constructor ...由于我们无法向静态构造函数添加访问修饰符,因此公共构造函数意味着您正在讨论实例构造函数。如果实例构造函数是公共的,那么外部世界可以创建其实例。 其他选项包括内部(可以在库中调用),私有(仅在类中)。

答案 3 :(得分:2)

静态构造函数

使用static modifier声明的构造函数是一个静态构造函数。静态构造函数用于初始化静态数据或执行需要在类的生命周期中仅执行一次的特定操作。静态构造函数是在类中执行的第一个代码块。静态构造函数在类的生命周期中执行一次且仅执行一次。它会自动调用。静态构造函数不接受任何参数。它没有访问说明符。它不是直接调用的。

实例或公共构造函数

实例构造函数用于初始化实例数据。每次创建类的对象时都会调用实例构造函数。它被明确地称为。实例构造函数接受参数。它有访问说明符。

答案 4 :(得分:0)

Static constructor仅调用创建的类的第一个实例,而public constructor则在每次创建该类的实例时调用。

静态构造函数

使用静态修饰符声明的构造函数是静态构造函数。 静态构造函数用于初始化静态数据或执行静态 在以下设备的生命周期中只需执行一次的特定操作 类。静态构造函数是在类中执行的第一段代码。 静态构造函数在生命周期中仅执行一次 类。它被自动调用。静态构造函数不使用 任何参数。它无权访问说明符。不叫 直接。

实例或公共构造函数

实例构造函数用于初始化实例数据。实例 每次创建类的对象时都会调用构造函数。它 被显式调用。实例构造函数接受参数。它有 访问说明符。

我的来源:Static Constructor Vs Instance Constructor in C#