Следующее объявление:
type
TRec = record
constructor Create;
end;
создает эту ошибку компиляции:
E2394 Параметрические конструкторы, недопустимые для типов записей
документация довольно бесполезно заявляет:
Дополнительная информация для этой ошибки или предупреждения отсутствует.
Мой вопрос в том, почему язык был разработан таким образом. Было ли это сделано так: эхо аналогичное ограничение для С# structs?
руководство по языку говорит следующее:
Записи создаются автоматически, используя конструктор no-argument по умолчанию, но классы должны быть явно построены. Поскольку записи имеют конструктор без аргументов по умолчанию, любой пользовательский конструктор записи должен иметь один или несколько параметров.
Но это не имеет большого смысла. Если для записи есть конструктор по умолчанию, он не может быть найден через RTTI. И даже если бы это было так, почему это означало бы невозможность добавить еще один? Вы можете сделать это для занятий.
Возможно, обоснование состоит в том, что если бы нам разрешили определять наши собственные конструкторы без параметров, мы бы ожидали, что компилятор их вызовет автоматически.
Примечание. Я понимаю, что вы можете использовать безпараметрическую статическую функцию класса в качестве обходного пути. В самом деле, я лично всегда предпочитаю использовать статическую функцию класса вместо конструкторов записи. Но это не вопрос. Я действительно хочу знать, почему конструкторы без параметров не допускаются к типам записей.