繁体   English   中英

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

[英]Public constructor and static constructor

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

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

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

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

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

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

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

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

静态构造函数

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

实例或公共构造函数

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

Static constructor只调用创建的类的第一个实例,但每次创建类的实例时都会调用public constructor

静态构造函数

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

实例或公共构造函数

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM