Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прог-шпоры-исходник.doc
Скачиваний:
1
Добавлен:
25.09.2019
Размер:
91.14 Кб
Скачать

15. Переменная Self:

Внутри каждого нестатического метода неявно определяется переменная Self, ссылающаяся на объект, вызвавший этот метод.

Например:

type   <имя класса> = class     i: integer;     constructor Create(i: integer);     begin       Self.i := i;     end;   end;

В момент вызова конструктора Create объект будет уже создан. Конструкция Self.i ссылается на поле i этого объекта, а не на параметр i функции Create. Фактически в любом нестатическом методе перед именем любого поля и методу этого класса неявно присутствует Self.

11. Понятие класса. Инициализаторы полей:

Класс представляет собой составной тип, состоящий из полей (переменных), методов (процедур и функций) и свойств. Переменные типа класс называются объектами или экземплярами класса.

Описание класса имеет вид:

type   <имя класса> = class     <описания полей>           <объявления или описания методов и описания свойств>   end;

После слова class в скобках может быть указано имя класса-предка. Поля и методы образуют интерфейс класса.

Объект класса создается с помощью служебного слова new:

var <переменная типа класс> := new <имя класса>();

При создании объекта его поля инициализируются автоматически нулевыми значениями если они не инициализированы явно. Их инициализация может проводиться как в конструкторе, так и непосредственно при описании. Инициализация поля при описании приводит к тому, что код инициализации вставляется в начало ВСЕХ конструкторов.

12. Видимость членов класса:

Каждое поле, метод или свойство класса имеет атрибут видимости. В PascalABC.NET существуют четыре типа атрибутов видимости: public (открытый), private (закрытый), protected (защищенный) и internal (внутренний). К члену класса, имеющему атрибут public, можно обратиться из любого места программы, члены класса с атрибутом private доступны только внутри методов этого класса, члены класса с атрибутом protected доступны внутри методов этого класса и всех его подклассов, члены класса с атрибутом internal доступны внутри сборки. Кроме того, private и protected члены видны отовсюду в пределах модуля, в котором определен класс.

13. Конструктор. Деструктор.

Объекты создаются с помощью специальных методов, называемых конструкторами. Конструктор представляет собой функцию, создающую объект в динамической памяти, инициализирующую его поля и возвращающую указатель на созданный объект. Этот указатель обычно сразу присваивается переменной типа класс. При описании конструктора вместо служебного слова function используется служебное слово constructor. Кроме того, для конструктора не указывается тип возвращаемого значения.

type   <имя класса1> = class     <описание полей класса>;     constructor Create(<параметры>);     begin <тело конструктора-могут быть инициализированы поля класса>     end; end;

В PascalABC.NET конструктор всегда должен иметь имя Create. При описании конструктора внутри класса можно опускать его имя. в PascalABC.NET всегда создается конструктор без параметров (независимо от того, определен ли другой конструктор). Этот конструктор инициализирует все поля нулевыми значениями (строковые поля - пустыми строками, логические  - значением False).

Для вызова конструктора можно использовать два способа.

1 способ. В стиле Object Pascal.

Для вызова конструктора следует указать имя класса, за которым следует точка-разделитель, имя конструктора и список параметров. Например:

var p: Person; p := Person.Create('Иванов',20);

2 способ. С помощью операции new - в стиле C# (предпочтительный).

var p: Person; p := new Person('Иванов',20);

Деструктор в Object Pascal - специальная процедура, уничтожающая объект и освобождающая динамическую память, которую этот объект занимал. При описании деструктора вместо служебного слова procedure используется служебное слово destructor.

Например:

destructor Destroy; begin   ... end;

Поскольку в PascalABC.NET память управляется сборщиком мусора, деструктор в PascalABC.NET не играет никакой роли и представляет собой обычную процедуру-метод.