В чем разница между статическими, внутренними и публичными конструкторами? - PullRequest
18 голосов
/ 10 августа 2011

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

 static xyz()
 {
 }

 public xyz()
 {
 }

 internal xyz()
 {
 }

Ответы [ 5 ]

13 голосов
/ 10 августа 2011

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

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

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

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

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

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

7 голосов
/ 10 августа 2011

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

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

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

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

2 голосов
/ 10 августа 2011

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

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

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

0 голосов
/ 10 августа 2011

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

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