在净私人VS静态构造函数(Private vs Static constructors in .Ne

2019-08-02 08:42发布

我搜索了这个有很多,但没有一个答案是明确的(AT-至少对我来说!)。 现在,我把在SO这个问题,因为我相信我能不能得到一个更明确的答案其他地方。

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

我受够了通常的答案,所以请帮助我做一些实时的例子和使用这些构造的优点/缺点。

Answer 1:

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

私有构造函数:使用时你只想要一个类从它自己的代码中(通常在一个静态方法)实例化。 例如:

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


Answer 2:

什么时候应该使用在我的课私有构造?

如果你想有一个构造函数,但不想将其暴露给世界。 这可能是因为你有一个调用构造函数(验证后)工厂方法,或者是因为该构造函数是由构造函数链连接称为(即public Foo(string) : this() { ...}

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

此外,在早期的C#编译器,当你写的东西现在是一个static类-具有私有构造函数使它看起来uncreatable的唯一途径。

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

当你需要的是状态之前初始化一些静态的状态由实例或静态方法访问。



Answer 3:

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

如果你有构造函数的重载私有构造被使用,其中一些只能由其他构造使用



文章来源: Private vs Static constructors in .Net