Doskonałe pytanie.
O ile mi wiadomo, nie można tego zrobić w aktualnej wersji Delphi. Jest to bardzo niefortunne, ponieważ te anonimowe procedury byłyby wspaniałe do szybkiego skonfigurowania obsługi zdarzeń obiektu, na przykład podczas konfigurowania urządzeń testowych w strukturze automatycznego testowania xUnit.
Nie powinno być dwa sposoby na CodeGear do wdrożenia tej funkcji:
1: Zezwalaj na tworzenie metod anonimowych. Coś takiego:
Button1.OnClick := procedure(sender : tobject) of object begin
...
end;
Problem polega na tym, co należy umieścić jako wskaźnik dla metody anonimowej. Można użyć wskaźnika własnego obiektu, z którego została utworzona anonimowa metoda, ale można tworzyć tylko anonimowe metody z kontekstu obiektu. Lepszym pomysłem może być po prostu stworzenie obojętnego obiektu za kulisami, aby zawierał anonimową metodę.
2: Alternatywnie, można pozwolić typom zdarzeń na akceptowanie zarówno metod, jak i procedur, o ile mają one wspólny podpis. W ten sposób możesz stworzyć obsługę zdarzeń tak, jak chcesz:
Button1.OnClick := procedure(sender : tobject) begin
...
end;
W moich oczach jest to najlepsze rozwiązanie.
@Majin: To jest sprytne i działa, ponieważ anonimowa metoda jest osadzona w niejawnej klasie. Koniecznie przeczytaj komentarz Barry'ego Kelly w cytowanym artykule na temat przyszłej kompatybilności, a także ten post Barry'ego Kelly: http://blog.barrkel.com/2010/01/using-anonymous-methods-in-method.html –
To rozwiązanie działa na platformie Win32, ale nie na Win64. –
@ChauCheeYang Najprawdopodobniej dlatego, że $ 0C powinno być SizeOf (Pointer) * 3 .. –