.Net中的私有与静态构造函数

时间:2012-11-06 09:44:11

标签: c# .net static-constructor private-constructor

我搜索了很多,但没有一个答案是清楚的(至少对我来说!)。现在我把这个问题放进去,因为我相信我无法在其他任何地方得到更明确的答案。

我什么时候应该在班上使用私有/静态构造函数?

我厌倦了常见的答案,所以请帮助我了解使用这些构造函数的一些实时示例和优缺点。

3 个答案:

答案 0 :(得分:17)

静态构造函数:用于初始化静态成员。

私有构造函数:当您只希望从其自己的代码(通常在静态方法中)实例化类时使用。例如:

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()
    {
    }
}

答案 1 :(得分:8)

  

我什么时候应该在班上使用私人构造函数?

当你想要一个构造函数时,但不想将它暴露给世界。这可能是因为你有一个调用构造函数的工厂方法(在验证之后),或者因为ctor-chaining(即public Foo(string) : this() { ...})调用了该构造函数。

此外,请注意,反射代码通常能够使用私有构造函数 - 例如序列化或ORM库。

此外,在早期的C#编译器中,当你编写现在的static类时 - 拥有一个私有构造函数是使它看起来不可创建的唯一方法。

  

我什么时候应该在班上使用静态构造函数?

当需要在实例或静态方法访问该状态之前初始化某些静态状态时。

答案 2 :(得分:3)

静态构造函数用于初始化类的静态成员,并在创建类的第一个实例或第一次访问静态成员时调用。

如果您有构造函数的重载,则使用私有构造函数,其中一些只应由其他构造函数使用