Язык программирования Fore является объектно-ориентированным. Классы используются для описания объектов, хранения их данных и реализации алгоритма работы. Определение класса включает в себя константы и поля, в которых хранятся данные объекта, и члены класса, которые оперируют этими данными: конструкторы, свойства, методы (процедуры/функции) и события.
Каждый член класса, а также сам класс, может иметь модификатор доступа, определяющий возможность его использования в других блоках кода.
Public Class TUserInfo: Object
//Поля для хранения значений внутри объекта класса
_FirstName, _LastName: String;
//Конструктор объекта
Public Constructor Create(Name: String = "");
Begin
_FirstName := Name;
End Constructor Create;
//Свойства объекта
Public Property FirstName: String
Get
Begin
Return _FirstName
End Get
Set
Begin
_FirstName := Value
End Set
End Property FirstName;
Public Property LastName: String
Get
Begin
Return _LastName
End Get
Set
Begin
_LastName := Value
End Set
End Property LastName;
//Методы, доступные только внутри класса
Sub Serialize;
Begin
//...
End Sub Serialize;
Sub Deserialize;
Begin
//...
End Sub Deserialize;
End Class TUserInfo;
Для определения пользовательских классов необходимо их наследовать от некоторого класса. В качестве родительского класса может выступать базовый класс Object или уже определенный пользовательский. По умолчанию класс имеет модификатор доступа Private. Класс может реализовывать ряд интерфейсов. Это означает, что класс должен содержать реализацию всех членов, описанных в интерфейсах.
Предварительное описание классов отсутствует. Любой класс может быть использован, если его описание встречается в данном модуле или в одном из импортируемых. Но при этом, предок любого класса должен быть определен до того, как от него будут наследоваться классы-потомки.
Для того чтобы внутри метода класса получить ссылку на объект, для которого будет вызван данный метод, можно использовать идентификатор Self. Предопределенный идентификатор Self имеет смысл только для методов класса, попытки его использования в других местах программы будут приводить к ошибке компиляции.
Директива Shared указывает на то, что данный метод или поле являются методом или полем класса (статические члены класса). Статические методы и поля не являются частью определенного экземпляра класса. Вне зависимости от того, какое количество экземпляров класса создано, существует только одна копия статического поля. Статические поля начинают свое существование после первого обращения к ним и прекращает при завершении существования домена приложения.
Примечание. Значения статических полей уникальны в рамках разных соединений с одним и тем же репозиторием.
В нестатических членах могут использоваться любые статические и нестатические члены класса. В статических членах могут использоваться только статические члены класса. Для обращение к статическим членам внутри класса можно использовать идентификатор Self или просто указывать наименование статического члена.
Директива Final указывает на то, что данный метод не может быть переопределён в потомках данного класса.
В качестве типа событий могут использоваться только делегаты. Делегат определяет, какую сигнатуру должен иметь метод, чтобы являться обработчиком данного события. Для событий допустима только операция присваивания, когда в правой части находится имя метода. Сигнатура метода при этом должна совпадать с сигнатурой делегата. Операция присваивания означает назначение нового обработчика события.
Class SampleClass: Object
Private Shared Temp: Integer;
Public Shared Sub Test;
Begin
Temp := TestEx(1);
//...
End Sub Test;
Public Shared Function TestEx(Index: Integer): Integer;
Var
i: Integer;
Begin
//...
Return i;
End Function TestEx;
Public Sub CreateSettings(Count: Integer);
Begin
//...
If Count < 1 Then
//Вызов метода через Self
Self.Test;
Else
//Вызов метода без использования Self
Temp := TestEx(Count);
End If;
End Sub CreateSettings;
Public Final Property GetValue: Integer
Get
Begin
//...
Temp := Correct(Temp);
//...
Return Temp;
End Get
End Property GetValue;
Private Function Correct(Value: Integer): Integer;
Var
i: Integer;
Begin
//...
Return i;
End Function Correct;
End Class SampleClass;
См. также:
Руководство по языку Fore | Создание объектов | Свойства класса | Делегаты и события | Интерфейсы