Создание делегата

Создание экземпляра делегата производится путем операции создания экземпляра делегата. Созданный экземпляр делегат является ссылкой на:

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

Пример

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;

См.также:

Делегаты