Интересный подход.
(Отказ от ответственности: не проверял это, но это что-то, что нужно исследовать): Возможно, вам нужно быть осторожным с тем, что происходит при захвате состояния метода, который «назначает» анонимный метод событию. Захват может быть преимуществом, но также может иметь побочные эффекты, которые вы не хотите. Если ваш анонимный метод нуждается в информации о форме во время ее запуска, он может в конечном итоге получить информацию во время своего назначения. Обновление: очевидно, это не тот случай, см. Комментарий Стефана Глиенке.
Тебе не нужны разные классы. Используя перегрузку, вы можете создавать различные функции class Create
, каждая из которых принимает определенную сигнатуру и возвращает соответствующий обработчик события, и компилятор ее разберут.
Управление временем жизни может быть упрощено, если вы производите от TInterfacedObject вместо TComponent. Подсчет ссылок должен затем позаботиться об уничтожении экземпляра, когда он больше не используется формой. Обновление : для этого требуется сохранить ссылку на экземпляр где-либо в форме, иначе пересчет не поможет, так как экземпляр будет освобожден сразу после назначения события уведомления. Вы можете добавить дополнительный параметр в класс Create функций, для которого вы передаете метод, который экземпляр может использовать для добавления себя в какой-либо список формы.
Примечание: В целом, хотя я должен согласиться с Дэвидом в его комментарии к вопросу: это звучит как большая работа для "единственной цели" использования анонимных методов ...