Создание экземпляра делегата производится путем операции создания экземпляра делегата. Созданный экземпляр делегат является ссылкой на:
Статический метод, указанный в выражении создания делегата.
Экземпляр объекта и его метод, указанные в выражении создания делегата.
Другой делегат.
Будучи единожды созданным экземпляр делегата всегда ссылается на один и тот же объект и метод. При комбинировании двух экземпляров делегатов или при удалении одного из другого всегда создается новый экземпляр с собственным списком вызовов, при этом списки вызовов операндов остаются неизменными.
Delegate UserEventHandler(x, y, z: integer);
Class UserObject
//Переопределение абстрактного события
Public Event OnUserEvent1: UserEventHandler;
Constructor UserObject();
Begin
//Установка обработчиков событий
//При возникновении события поочередно будут выполнены процедуры
//ForEven1 и ForEven2
OnUserEvent1 := ForEven1;
OnUserEvent1 += ForEven2;
End Constructor;
//Процедуры - обработчики событий
Sub ForEven1(x, y, z: integer);
Begin
End Sub;
Sub ForEven2(x, y, z: integer);
Begin
End Sub;
//Процедура создания и вызова экземпляра делегата
Sub RunDelegate(x, y, z: integer);
Var
d: UserEventHandler;
Begin
//Создании экземпляра делегата
d := New UserEventHandler(ForEven1);
//Вызов делегата. При вызове будет выполнена процедура ForEven1
d(x, y, z);
End Sub;
End Class;
См.также: