ФЭНДОМ


Делегаты – это средство вызова методов классов обобщённым, но типобезопасным способом. Делегат может быть динамически (во время выполнения программы) привязан к нужному методу какого-либо объекта, а затем вызван, при этом вызывающий может не знать типа вызываемого объекта.

Делегаты могут копироваться или передаваться как параметры; последнее лучше производить по ссылке, чтобы не расходовать память и время на создание копии.

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

Делегаты могут привязываться через обычный указатель или через слабый указатель (на метод UObject'а или разделяемого указателя). Использование слабых указателей безопасно, если в потенциально рискованных ситуациях перед вызовом осуществлять проверку с помощью метода IsBound или вызывать делегат методом ExecuteIfBound.

Подробные правила изложены в исходном файле Engine\Source\Runtime\Core\Public\Templates\DelegateSignatureImpl.ipl.

Помимо обычных параметров, передаваемых вызывающим делегата кодом, можно использовать так называемые payload data, которые присваиваются делегату при его создании и автоматически передаются при всех вызовах.