17

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

4

4 回答 4

35

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

public仅仅意味着该类的用户可以调用该构造函数(而不是,比如说,private)。

static意味着方法(在这种情况下是构造函数)不属于类的实例,而是属于“类本身”。特别是,当第一次使用该类时,会自动调用一次静态构造函数。

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

于 2010-06-08T07:29:28.217 回答
26

在您的类被实例化之前,静态构造函数只运行一次。如果您希望某事只发生一次,则使用它。一个很好的例子是 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.
}
于 2010-06-08T07:40:12.683 回答
3

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

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

于 2010-06-08T07:30:56.220 回答
0

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

静态构造函数

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

实例或公共构造函数

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

我的资料来源:C# 中的静态构造函数与实例构造函数

于 2020-11-14T13:27:31.010 回答