【发布时间】:2011-03-01 00:59:53
【问题描述】:
我正在阅读使用两个构造函数的 C# 代码。一个是静态的,另一个是公共的。这两个构造函数有什么区别?我们必须使用静态构造函数来做什么?
【问题讨论】:
标签: c# static-constructor
我正在阅读使用两个构造函数的 C# 代码。一个是静态的,另一个是公共的。这两个构造函数有什么区别?我们必须使用静态构造函数来做什么?
【问题讨论】:
标签: c# static-constructor
static 和 public 是正交概念(即它们彼此没有任何关系)。
public 仅表示该类的用户可以调用该构造函数(与 private 相反)。
static 表示方法(在本例中为构造函数)不属于类的实例,而是属于“类本身”。特别是,当第一次使用该类时,会自动调用静态构造函数一次。
此外,不能手动调用静态构造函数public 或private;它仅由 .NET 运行时本身调用 - 因此将其标记为 public 没有意义。
【讨论】:
静态构造函数只运行一次,在你的类被实例化之前。如果您希望某事只发生一次,则使用它。一个很好的例子是 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.
}
【讨论】:
静态构造函数...保证在应用程序/应用程序域的整个生命周期中被“一次”调用。它可以包含您只想执行一次的语句。
Public Constructor... 因为我们不能将访问修饰符添加到静态构造函数,所以公共构造函数意味着您正在谈论实例构造函数。如果实例构造函数是公共的,那么外部世界可以创建它的实例。 其他选项是 Internal(可以从库中调用)、Private(只能从类中调用)。
【讨论】:
Static constructor 只调用创建的类的第一个实例,但每次创建该类的实例时都会调用public constructor。
静态构造函数
使用静态修饰符声明的构造函数是静态构造函数。 静态构造函数用于初始化静态数据或执行 在生命周期中只需要执行一次的特定操作 班级。静态构造函数是在类中执行的第一个代码块。 静态构造函数在生命周期内只执行一次 班级。它是自动调用的。静态构造函数不取 任何参数。它无法访问说明符。它不被称为 直接。
实例或公共构造函数
实例构造函数用于初始化实例数据。实例 每次创建类的对象时都会调用构造函数。它 被显式调用。实例构造函数接受参数。它有 访问说明符。
【讨论】: