Приватные и статические конструкторы в.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 - наличие частного конструктора было единственным способом сделать его неуправляемым.
Когда я должен использовать статический конструктор в своем классе?
Когда вам нужно инициализировать некоторое статическое состояние до того, как к этому состоянию будут обращаться экземпляры или статические методы.
Статический конструктор используется для инициализации статических членов класса и вызывается при создании первого экземпляра класса или при первом обращении к статическому члену.
Закрытый конструктор используется, если у вас есть перегрузки конструктора, и некоторые из них должны использоваться только другими конструкторами