2010-01-27 5 views
7

У меня есть сомнение, что статический класс может содержать частный конструктор.Можем ли мы иметь частный конструктор в статическом классе?

+6

Если у вас есть Visual Studio (или аналогичный) установлен, я думаю, что это займет у Вас менее 1 минуты, чтобы собрать и проверить это для себя ... –

+3

Иоганну, что нет никаких оснований не спросите об этом. См. Часто задаваемые вопросы. –

ответ

7

Статических классы не могут иметь экземпляр конструкторов

http://msdn.microsoft.com/en-us/library/79b3xss3.aspx

Ниже приведены основные характеристики статического класса:

  • Содержит только статические элементы.
  • Невозможно создать экземпляр.
  • Запечатан.
  • Не может содержать конструкторы экземпляров.
6

Статический класс не может иметь любой конструктор экземпляра (см. CS0710), будь то открытый, закрытый, защищенный или внутренний.

См. Следующую статью для получения дополнительной информации.

Static Classes and Static Class Members (C# Programming Guide)

+0

@jonathan: Я рассматриваю «открытый статический класс» в Reflector ildasm, но могу найти только статический конструктор 'private static void .cctor(). Где будет этот конструктор частного экземпляра? –

5

Что бы этот конструктор сделать? Класс статический, поэтому он никогда не создается. У вас может быть статический конструктор нестатического класса для инициализации статических полей, но в статическом классе единственным конструктором, который имеет смысл, является статический конструктор, который называется CLR.

Добавление: Jon Skeet posted an article о время инициализации статического класса (как правило, он инициализируется при первом использовании, но иногда вы хотите инициализировать его при запуске программы) и изменение возможно в .net 4.

+0

@ Джонатан Вау, это странно. Я пытаюсь думать, как это когда-либо было бы полезно, но по мере того, как они заменяли это, я думаю, что у них был тот же вывод :) –

+0

@ Джонатан сообщает CLR, что класс _static_ не может быть создан для Real? –

3

Ваши сомнения верны.

Статический класс может иметь только статический конструктор, а public/private не применяется, так как ваш код никогда не может вызвать этот конструктор (CLR).

Таким образом, вы не можете использовать модификатор доступа (public/private/...) в статическом конструкторе.

2

правила статические классы не могут иметь экземпляр конструкторы

Смежные вопросы