Различия между декларациями классов

Существует много способов объявить новый тип класса:

  • TMyClass1 = TObject;
  • TMyClass2 = type TObject;
  • TMyClass3 = class end;
  • TMyClass4 = class(TObject);
  • TMyClass5 = class(TObject) end;

Я понимаю, что классы 3, 4 и 5 являются потомками TObject, но неясно, как отличаются 1 и 2, и каковы различия между 3,4 и 5.

Есть ли различия?

Ответ 1

  • TMyClass1 - это просто псевдоним - другое имя для TObject
  • TMyClass2 - это строго типизированный псевдоним для TObject (мы называем их "type'd types" ); очень необычно использовать это с классами, хотя, как правило, вы использовали бы это, например. Pointer, чтобы создать тип дескриптора или что-то в этом роде (см., например, как это используется в Windows.pas).
  • TMyClass3 - это класс, неявно убывающий от TObject, без новых членов.
  • TMyClass4 - это класс, явно опускаясь из TObject, без новых членов, используя сжатый синтаксис. Как правило, это используется для классов маркеров, где уникальность самого класса - интересная вещь - часто используется для Exception потомков
  • TMyClass5 - это класс, явно опускаясь из TObject, без новых членов. TObject в объявлении является избыточным, но это ничего не вредит, чтобы сделать его явным.