Составляющие класса

Поля.

Полями называются инкапсулированные в классе данные. Поля могут быть любого типа, в том числе – классами, например:

Type

TMyClass = class

aIntField: Integer;

aStrField: String;

aObjField: TObject;

end;

Каждый объект получает уникальный набор полей, но общий для всех объектов данного класса набор методов и свойств. Фундаментальный принцип инкапсуляции требует обращаться к полям только с помощью методов и свойств класса, однако в Delphi разрешается обращаться к полям и напрямую:

Type

TMyClass = class

FIntField: Integer;

FStrField: String;

end;

Var

aObject: TMyClass;

Begin

aObject.FIntField := 0;

aObject.FStrField := ‘Строка символов’;

end;

Класс-потомок получает все поля всех своих предков и может дополнять их своими, но он не может переопределять их или удалять. Таким образом, чем ниже в дереве иерархии располагается класс, тем больше данных получают в свое расположение его объекты.

Методы

Инкапсулированные в классе процедуры и функции называются методами. Они объявляются так же, как и обычные подпрограммы:

Type

TMyClass = class

function MyFunc(aPar: Integer): Integer;

procedure MyProc;

End;

Доcтуп к методам класса, как и к его полям, возможен с помощью составных имен

Var

aObject: TMyClass;

Begin

aObject.MyProc;

end;

Как уже говорилось, методы класса могут перекрываться в потомках. Например:

Type

TParentClass = class

procedure DoWork;

End;

TChildClass = class (TParentClass)

procedure DoWork;

end;

Потомки обоих классов могут выполнять сходную по названию процедуру DoWork, но, в общем случае, будут это делать по-разному. Такое перекрытие методов называется статическим, так как реализуется компилятором.

Свойства

Свойства – это специальный механизм классов, регулирующий доступ к полям. Свойства объявляются с помощью зарезервированных слов property, readи write(слова readи writeсчитаются зарезервированными только в контексте объявления свойства). Обычно свойство связано с некоторым полем и указывает те методы класса, которые должны использоваться при записи в это поле или при чтении из него. Например:

Type

TaClass = class

IntField: Integer;

function GetField: Integer;

procedure SetField(Value: Integer);

property IntegerValue: Integer readGetField

writeSetField;

end;

В контексте программы свойство ведет себя как обычное поле. Например, можно написать такие операторы:

Var

aClass: TaClass;

Value: Integer;

Begin

aClass := TaClass.Create; { Обязательное обращение

к конструктору перед обращением к полю

или свойству!}

aClass.IntegerValue := 0;

Value := aClass.IntegerValue;

FreeAndNil(aClass); // Удаление ненужного объекта

end;

Более того, возможен и такой оператор присваивания:

aClass.IntField := NewValue;

Разница между этим оператором и оператором, показанным ниже, заключается в том, что при обращении к свойству автоматически подключается метод SetField. в котором могут реализовываться специфичные действия:

aClass.IntegerValue := NewValue;

Еще один пример:

Label1.Caption := 'Строка';

Свойство Caption компонента Label1 вызывает метод SetText, который не только запоминает строку символов во внутренней переменной, но и осуществляет прорисовку метки с новым текстом.

 








Дата добавления: 2017-01-29; просмотров: 958;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.01 сек.