【问题标题】:Public constructor and static constructor公共构造函数和静态构造函数
【发布时间】:2011-03-01 00:59:53
【问题描述】:

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

【问题讨论】:

    标签: c# static-constructor


    【解决方案1】:

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

    public 仅表示该类的用户可以调用该构造函数(与 private 相反)。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 静态构造函数是否保证被调用一次?如果该类型在应用的生命周期内从未使用过怎么办?
        • @MPritch,在这种情况下你是对的,它不会被调用。但是如果我没有在我的应用程序中的任何地方使用(或引用)它,我什至不需要担心一个类正在做(或不做)的事情,仪式?
        • 这一切都取决于你在构造函数中所做的事情
        【解决方案4】:

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

        静态构造函数

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

        实例或公共构造函数

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

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

        【讨论】:

          猜你喜欢
          • 2011-10-23
          • 1970-01-01
          • 2011-02-08
          • 1970-01-01
          • 2017-04-30
          • 2013-03-05
          • 2010-09-12
          • 2011-04-19
          • 1970-01-01
          相关资源
          最近更新 更多