Приватные и статические конструкторы в.Net

Я много искал, но ни один из ответов не ясен (по крайней мере, для меня!). Сейчас я ставлю этот вопрос на SO, так как я считаю, что я не могу получить более ясный ответ где-либо еще.

Когда я должен использовать приватный / статический конструктор в моем классе?

Я сыт по горло обычными ответами, поэтому, пожалуйста, помогите мне с некоторыми примерами в реальном времени и преимуществами / недостатками использования этих конструкторов.

3 ответа

Решение

Статические конструкторы: используются для инициализации статических элементов.

Закрытые конструкторы: используются, когда вы хотите, чтобы класс создавался только из его собственного кода (обычно в статическом методе). Например:

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 class - наличие частного конструктора было единственным способом сделать его неуправляемым.

Когда я должен использовать статический конструктор в своем классе?

Когда вам нужно инициализировать некоторое статическое состояние до того, как к этому состоянию будут обращаться экземпляры или статические методы.

Статический конструктор используется для инициализации статических членов класса и вызывается при создании первого экземпляра класса или при первом обращении к статическому члену.

Закрытый конструктор используется, если у вас есть перегрузки конструктора, и некоторые из них должны использоваться только другими конструкторами

Другие вопросы по тегам