C # класс без конструктора - PullRequest
13 голосов
/ 14 февраля 2012

Как возможно, что класс в C # может не иметь определенных конструкторов? Например, у меня есть класс

internal class TextStyle
{
    internal string text = "";
    internal Font font = new Font("Arial", 8);
    internal Color color = Color.Black;
}

И в коде этот класс создается как

TextStyle textParameters = new TextStyle();

1 Ответ

38 голосов
/ 14 февраля 2012

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

public TextStyle()
{
}

Это описано в разделе 10.11.4 спецификации C # 4:

Если класс не содержит объявлений конструктора экземпляра, автоматически предоставляется конструктор экземпляра по умолчанию. Этот конструктор по умолчанию просто вызывает конструктор без параметров прямого базового класса. Если у прямого базового класса нет доступного конструктора экземпляра без параметров, возникает ошибка времени компиляции. Если класс является абстрактным, тогда объявленная доступность для конструктора по умолчанию - protected. В противном случае объявленная доступность для конструктора по умолчанию: public.

Единственные классы в C #, у которых нет любых конструкторов экземпляров, являются статическими классами, и они не могут иметь конструкторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...