В чем разница между статическими, внутренними и общественными конструкторами?

В чем разница между статическими, внутренними и публичными конструкторами? Почему мы должны создавать все вместе?

 static xyz()
 {
 }

 public xyz()
 {
 }

 internal xyz()
 {
 }

Ответ 1

static конструктор будет вызываться при первом экземпляре объекта типа или вызывается статический метод. И будет работать только один раз

public конструктор доступен для всех других типов

internal конструктор доступен только для типов в той же сборке

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

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

и private доступный только из самого типа и любых вложенных типов

Ответ 2

Разница между public и internal заключается в том, что конструктор internal может быть вызван только из одной сборки, а public можно вызвать из других сборок.

static - это конструктор, который вызывается только при первом обращении к классу. Статические члены не принадлежат экземпляру класса, а "самому классу". См. http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx для получения дополнительной информации о static.

Ответ 3

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

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

Ответ 4

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

Все остальные конструкторы вызываются при создании нового экземпляра. Модификатор определяет, какой код может создать экземпляр.

Если ваш конструктор является приватным, сам класс и вложенные типы могут создать экземпляр (возможно, в статическом методе factory). Это работает как public/private/internal по методам.

Ответ 5

Вам не нужно создавать все типы конструкторов. Модификаторы доступа выполняют ту же функцию, что и любой другой модификатор доступа, - чтобы определить, как можно получить доступ к конструкторам.

  • статический конструктор будет вызываться при первом статическом доступе к классу.
  • конструктор с модификатором доступа внутренний может быть вызван только элементами, отвечающими критериям для internal, который "доступен только внутри файлов в той же сборке".
  • конструктор с общедоступным модификатором доступа может быть доступен любым
  • и т.д. Конструкторы protected и private работают так, как вы ожидаете - конструкторы доступны для элементов, соответствующих критериям модификатора доступа.