Открытый конструктор и статический конструктор
Я читаю код на С#, который использует два конструктора. Один из них статичен, а другой является общедоступным. В чем разница между этими двумя конструкторами? И для чего мы должны использовать статические конструкторы?
Ответы
Ответ 1
static
и public
- ортогональные понятия (т.е. они не имеют ничего общего друг с другом).
public
просто означает, что пользователи класса могут вызывать этот конструктор (в отличие от, скажем, private
).
static
означает, что метод (в данном случае конструктор) относится не к экземпляру класса, а к самому "классу". В частности, статический конструктор вызывается один раз, автоматически, когда класс используется в первый раз.
Кроме того, статический конструктор нельзя сделать public
или private
, так как он не может быть вызван вручную; его только вызвал сама среда выполнения .NET, поэтому ее обозначение как public
не имеет смысла.
Ответ 2
Статический конструктор запускается только один раз, прежде чем ваш экземпляр будет создан. Он использовался, если вы хотите, чтобы что-то произошло только один раз. Хорошим примером может быть класс шины (аналогичный тому, что они объясняют в статье MSDN):
public class Bus
{
public static int busNo = 0;
static Bus()
{
Console.WriteLine("Woey, it a new day! Drivers are starting to work.");
}
public Bus()
{
busNo++;
Console.WriteLine("Bus #{0} goes from the depot.", busNo);
}
}
class Program
{
static void Main(string[] args)
{
Bus busOne = new Bus();
Bus busTwo = new Bus();
}
// Output:
// Woey, it a new day! Drivers are starting to work.
// Bus #1 goes from the depot.
// Bus #2 goes from the depot.
}
Ответ 3
Статический конструктор... Гарантируется, что он будет называться "один раз" в течение срока действия приложения/домена приложения. Он может содержать инструкции, которые вы хотите выполнить только один раз.
Public Constructor... Поскольку мы не можем добавлять модификаторы доступа к статическому конструктору, общий конструктор означает, что вы говорите о конструкторе экземпляра. Если конструктор экземпляра является общедоступным, то внешний мир может создавать его экземпляры.
Другие параметры - Internal (могут быть вызваны из библиотеки), Private (только внутри класса).
Ответ 4
Статический конструктор
Конструктор, объявленный с использованием статического модификатора, является статическим конструктором. Статический конструктор используется для инициализации статических данных или для выполнения определенного действия, которое необходимо выполнять только один раз в жизненном цикле класса. Статический конструктор - это первый блок кода для выполнения в классе. Статический конструктор выполняет один и только один раз в жизненном цикле класса. Он вызывается автоматически. Статический конструктор не принимает никаких параметров. У него нет спецификаторов доступа. Он не вызывается напрямую.
Экземпляр или публичный конструктор
Конструктор экземпляра используется для инициализации данных экземпляра. Конструктор экземпляра вызывается каждый раз, когда создается объект класса. Он называется явно. Конструктор экземпляра принимает параметры. У него есть спецификаторы доступа.