我经常搜索了很多内容,但是没有一个答案(对我来说至关重要!)。现在我将这个问题提出了,因为我相信我在其他任何地方都无法获得更澄清的答案。
我什么时候应该在班上使用私人/静态构造函数?
我受够了通常的答案,所以请帮助我使用这些构造函数的一些实时示例和优点/缺点。
静态构造函数:用于初始化静态成员。
私有构造函数:当您只希望从其自己的代码内实例化类(通常以静态方法)进行实例化时使用。例如:
public class Thing
{
static int Number;
static Thing()
{
Number = 42; // This will only be called once, no matter how many instances of the class are created
}
// This method is the only means for external code to get a new Thing
public static Thing GetNewThing()
{
return new Thing();
}
// This constructor can only be called from within the class.
private Thing()
{
}
}
我什么时候应该在班上使用私人构造函数?
当您想要一个构造函数时,但不想将其暴露于世界。这可能是因为您有一种调用构造函数的工厂方法(验证后),或者是因为该构造函数是由CTOR链接调用的(即public Foo(string) : this() { ...}
)。
此外,请注意,反射代码通常能够使用私有构造函数 - 例如序列化或ORM库。
另外,在早期的C#编译器中,当您编写现在是static
类的内容时 - 拥有一个私有构造函数是使其显得无法创造的唯一方法。
我什么时候应该在班上使用静态构造函数?
当您需要在使用实例或静态方法访问该状态之前初始化某些静态状态时。
静态构造函数用于填充类的静态成员,并在创建类的第一个实例或第一次访问静态成员时被调用。
如果您的构造函数过载,则使用私有构造函数,其中一些仅应由其他构造函数使用