Класс С# без конструктора

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

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

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

TextStyle textParameters = new TextStyle();

Ответ 1

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

public TextStyle()
{
}

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

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

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

Ответ 2

Существует бессмысленный пустой конструктор, если вы не определяете другой конструктор.