Class/ru
│
Deutsch (de) │
English (en) │
français (fr) │
русский (ru) │
Класс является хорошо структурированным типом данных в Object Pascal и его диалектах (таких, как Delphi или ObjFPC). Классы могут содержать переменные, конструкторы, деструкторы, функции, процедуры и свойства.
Также классы освобождают программиста от необходимости использовать указатели и ссылки. Они автоматически обрабатываются компилятором во время компиляции.
Классы могут наследоваться от других классов или быть унаследованными в свою очередь. Любой класс, родительский класс которого не уточнен программистом, автоматически наследуется от TObject, так как он имеет необходимые компоненты для всех классов. Из-за зависимости TObject, в деструкторе любой подкласс должен иметь директиву override. Кроме того, любой из конструкторов вашего класса должен иметь в своем теле оператор inherited. Класс может иметь несколько конструкторов, но только один деструктор.
Object Pascal не поддерживает множественное наследование: кроме неявного наследования от TObject классы могут иметь только один родительский класс. Полиморфизм реализован с помощью директив методов. Ниже представлен пример простого объявления класса; давайте разберем его.
type
TMyClass = class
private
FSomeVar: integer;
public
constructor Create; overload;
constructor Create(Args: array of integer); overload;
destructor Destroy; override;
function GetSomeVar: integer;
procedure SetSomeVar(newvalue: integer);
published
property SomeVar: integer read GetSomeVar write SetSomeVar default 0;
end;
Между ключевыми словами class и end мы видим объявления членов - переменных и методов. Некоторым методам (функциям и/или процедурам) предшествуют модификаторы области видимости (private, public, published), за ними следуют директивы (overload, override), а также странная штука под названием property. Давайте разберем их все.
Пояснения о наследовании
В Object Pascal производные классы наследуют все члены базового класса, даже те, которые не перегружены с теми же именами. Например:
type
// базовый класс
MyClass = class
procedure Proc1;
end;
// производный класс
YourClass = class(MyClass)
procedure Proc1; //такое имя процедуры, как и в классе MyClass
end;
var
a: MyClass;
b: YourClass;
begin
a := MyClass.Create;
b := YourClass.Create;
a.Proc1; // использует процедуру класса MyClass
b.Proc1; // использует процедуру класса YourClass
MyClass(b).Proc1; // использует процедуру класса MyClass
Модификаторы области видимости
Модификаторы области видимости сообщают компилятору кто может вызывать методы класса:
- private: член может быть вызван/доступен только с помощью методов данного класса;
- public: член может быть вызван/доступен из любого другого места программы;
- protected: член может быть вызван/доступен из других классов в том же модуле и из производных классов, но не из внешних классов.
- published: переменная опубликована и будет доступна в Инспекторе объектов IDE.
Модификаторы области видимости не могут быть изменены в производных классах: члены будут сохранять их видимость (или её отсутствие) всегда и везде.
Типы данных | |
---|---|
Простые типы | Boolean | Byte | Cardinal | Char | Currency | Extended | Int64 | Integer | Longint | Pointer | Real | Shortint | Smallint | Word |
Сложные типы | Array | Class | Record | Set | String | Shortstring |