2010-06-08 205 views

回答

30

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

public只是表示该类的用户可以调用该构造函数(而不是像private)。

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

此外,静态构造函数不能被制作为publicprivate,因为它不能被手动调用;它只能由.NET运行时自己调用 - 因此将其标记为public不会有意义。

3

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

Public Constructor ...由于我们不能将访问修饰符添加到静态构造函数,所以公共构造函数意味着您正在讨论实例构造函数。如果一个实例构造函数是公共的,那么外部世界可以创建它的实例。 其他选项是内部的(可以从图书馆内部调用),私人的(仅限于课堂内部)。

+1

保证被调用一次的静态构造函数?如果该类型在应用程序的生命周期内从未使用过,该怎么办? – MPritchard 2010-06-08 07:43:14

+0

@Pritch,你是对的,在这种情况下,它不会被调用。但是,如果我不在我的应用程序中的任何地方使用(或引用)仪式,我甚至不需要担心课程正在做(或不做)的事情? – 2010-06-08 07:50:14

+0

这一切都取决于你在构造函数中做什么 – MPritchard 2010-06-08 09:12:32

22

在类实例化之前,静态构造函数只运行一次。如果你想要发生一次事情就会使用它。一个很好的例子是汽车类(类似于他们在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. 
} 
+0

我喜欢它,因为清晰的第一行:简单和简单! – 2016-05-27 06:41:01

2

静态构造函数

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

实例或公共构造

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