我搜索了很多,但没有一个答案是明确的(至少对我来说!)。现在我把这个问题放在 SO 中,因为我相信我无法在其他任何地方得到更明确的答案。
我什么时候应该在我的类中使用私有/静态构造函数?
我厌倦了通常的答案,所以请帮助我提供一些实时示例以及使用这些构造函数的优点/缺点。
我搜索了很多,但没有一个答案是明确的(至少对我来说!)。现在我把这个问题放在 SO 中,因为我相信我无法在其他任何地方得到更明确的答案。
我什么时候应该在我的类中使用私有/静态构造函数?
我厌倦了通常的答案,所以请帮助我提供一些实时示例以及使用这些构造函数的优点/缺点。
静态构造函数:用于初始化静态成员。
私有构造函数:当您只想从其自己的代码中实例化一个类时使用(通常在静态方法中)。例如:
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-chaining(即public Foo(string) : this() { ...}
)调用。
此外,请注意反射代码通常能够使用私有构造函数——例如序列化或 ORM 库。
此外,在早期的 C# 编译器中,当您编写现在将成为static
类的内容时 - 拥有私有构造函数是使其看起来无法创建的唯一方法。
我什么时候应该在我的类中使用静态构造函数?
When you need to initialize some static state prior to that state being accessed by instances or static methods.
静态构造函数用于初始化类的静态成员,在创建类的第一个实例或第一次访问静态成员时调用。
如果您有构造函数的重载,则使用私有构造函数,其中一些只能由其他构造函数使用