Объявление вложенных типов
Объявления типов могут быть вложены в объявление класса. Вложенные типы часто используются в объектно-ориентированном программировании. Они дают возможность не разделять концептуально связанные типы и избежать конфликтов имен. Синтаксис объявления вложенных типов может быть использован и при работе с компилятором Delphi для Win32.
Синтаксис объявления вложенных типов
nestedTypeDeclaration подчиняется обычным правилам синтаксиса объявления типов.
type className = class [abstract | sealed] (ancestorType) memberList type nestedTypeDeclaration memberList end;
Область объявления вложенного типа заканчивается первым упоминанием элемента, не являющегося идентификатором. Например, ключевыми словами procedure, class, type или спецификаторами области видимости.
К вложенным типам и к типам, которые их содержат, применяются обычные правила доступа. Вложенный тип может иметь доступ к переменной (полю, свойству или методу) класса-контейнера при указании ссылки на объект. Вложенный тип может иметь доступ к полям класса, свойствам класса и статичным методам класса без указания ссылки на объект, но при этом действуют обычные правила области видимости Delphi.
Вложенные типы не увеличивают размер класса-контейнера. Созадание экземпляр класса-контейнера не создает экземпляра вложенного типа. Вложенные типы связаны с классами-контейнерами только по контексту их объявления.
Объявление и доступ к вложенным классам
Следующий пример показывает, как объявить вложенный класс и как получить доступ к его полям и методам:
type TOuterClass = class strict private myField: Integer; public type TInnerClass = class public myInnerField: Integer; procedure innerProc; end; procedure outerProc; end;
Для реализации метода innerProc внутреннего класса, вам необходимо специфицировать его имя именем внешнего класса. То есть:
procedure TOuterClass.TInnerClass.innerProc; begin ... end;
Для доступа к элементам вложенного типа следует использовать точечную нотацию, как при доступе к элементам обычного класса. Например:
var x: TOuterClass; y: TOuterClass.TInnerClass; begin x := TOuterClass.Create; x.outerProc; ... y := TOuterClass.TInnerClass.Create; y.innerProc;
Вложенные константы
Константы могут быть объявлены внутри типов таким же образом, как и вложенные классы. Секции объявления констант завершаются такими же элементами, как и секции объявления вложенных типов, в частности, зарезервированными словами или спецификаторами видимости. Типизированные константы в этом случае запрещены, то есть вы не можете объявить вложенные константы значимых типов, таких как System.Currency или System.TDateTime.
Вложенные константы могут быть любого простого типа: порядковые, порядковые поддиапазоны, перечисления, строки и вещественные типы.
Следующий пример показывает объявление вложенных констант:
type TMyClass = class const x = 12; y = TMyClass.x + 23; procedure Hello; private const s = 'A string constant'; end; begin Writeln(TMyClass.y); //Выводит значение y, 35. end.
Здесь, наверное, понятнее будет перевод nested как "вложенные". Слово "встроенные" легко прочесть как базовые (типы языка).
ОтветитьУдалитьда. действительно, обычно переводят как "вложенные". недосмотрел. исправлю.
Удалить