Открытый конструктор и статический конструктор - PullRequest
15 голосов
/ 08 июня 2010

Я читаю код на C #, который использует два конструктора. Один статичен, а другой общедоступен. В чем разница между этими двумя конструкторами? А для чего мы должны использовать статические конструкторы?

Ответы [ 4 ]

31 голосов
/ 08 июня 2010

static и public являются ортогональными понятиями (т.е. они не имеют ничего общего друг с другом).

public просто означает, что пользователи класса могут вызывать этот конструктор (какв противоположность, скажем, private).

static означает, что метод (в данном случае конструктор) принадлежит не экземпляру класса, а «самому классу».В частности, статический конструктор вызывается один раз , автоматически, когда класс используется впервые.

Кроме того, статический конструктор нельзя сделать public или private, посколькуего нельзя вызвать вручную;он вызывается только самой средой выполнения .NET, поэтому пометить его как public не имеет смысла.

24 голосов
/ 08 июня 2010

Статический конструктор запускается только один раз, до создания экземпляра вашего класса.Он используется, если вы хотите, чтобы что-то произошло только один раз.Хорошим примером будет класс Bus (похожий на то, что они объясняют в MSDN статье ):

public class Bus
{
    public static int busNo = 0;

    static Bus()
    {
        Console.WriteLine("Woey, it's 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's a new day! Drivers are starting to work.
    // Bus #1 goes from the depot.
    // Bus #2 goes from the depot.
}
3 голосов
/ 08 июня 2010

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

Открытый конструктор ... Поскольку мы не можем добавлять модификаторы доступа к статическому конструктору, открытый конструктор означает, что вы говорите о конструкторе экземпляра.Если конструктор экземпляра общедоступен, то внешний мир может создавать его экземпляры.Другие опции: Внутренние (можно вызывать из библиотеки), Частные (только из класса).

2 голосов
/ 27 мая 2016

Статический конструктор

Конструктор, объявленный с использованием статического модификатора, является статическим конструктором.Статический конструктор используется для инициализации статических данных или для выполнения определенного действия, которое необходимо выполнить только один раз в жизненном цикле класса.Статический конструктор - это первый блок кода, который нужно выполнить в классе.Статический конструктор выполняет один и только один раз в жизненном цикле класса.Он вызывается автоматически.Статический конструктор не принимает никаких параметров.У него нет спецификаторов доступа.Он не вызывается напрямую.

Экземпляр или открытый конструктор

Конструктор экземпляра используется для инициализации данных экземпляра.Конструктор экземпляра вызывается каждый раз, когда создается объект класса.Это называется явно.Конструктор экземпляра принимает параметры.Имеет спецификаторы доступа.

...