В чем разница между статическими, внутренними и публичными конструкторами? Почему мы должны создавать все вместе?
static xyz()
{
}
public xyz()
{
}
internal xyz()
{
}
В чем разница между статическими, внутренними и публичными конструкторами? Почему мы должны создавать все вместе?
static xyz()
{
}
public xyz()
{
}
internal xyz()
{
}
static
конструктор будет вызываться при первом экземпляре объекта типа или вызывается статический метод. И будет работать только один раз
public
конструктор доступен для всех других типов
internal
конструктор доступен только для типов в той же сборке
Вдобавок к этим трем также protected
которое доступно только для типов, полученных из закрывающего типа
и protected internal
который доступен только для типов в той же сборке или тех, которые производятся от закрытого типа
и private
доступный только из самого типа и любых вложенных типов
Разница между public
и internal
заключается в том, что конструктор internal
может быть вызван только из одной сборки, а public
можно вызвать из других сборок.
static
- это конструктор, который вызывается только при первом обращении к классу. Статические члены не принадлежат экземпляру класса, а "самому классу". См. http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx для получения дополнительной информации о static
.
new
Ваш код фактически не компилируется, потому что внутренний и общедоступный - это тот же самый конструктор с разными модификаторами, чего вы не можете сделать. Вам нужно выбрать внутренний или публичный (или закрытый).
Статический конструктор называется первым, когда используется тип. Либо в статическом контексте, либо путем создания экземпляра.
Все остальные конструкторы вызываются при создании нового экземпляра. Модификатор определяет, какой код может создать экземпляр.
Если ваш конструктор является приватным, сам класс и вложенные типы могут создать экземпляр (возможно, в статическом методе factory). Это работает как public/private/internal по методам.
Вам не нужно создавать все типы конструкторов. Модификаторы доступа выполняют ту же функцию, что и любой другой модификатор доступа, - чтобы определить, как можно получить доступ к конструкторам.
internal
, который "доступен только внутри файлов в той же сборке".protected
и private
работают так, как вы ожидаете - конструкторы доступны для элементов, соответствующих критериям модификатора доступа.