Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

TVirtualMethodInterceptor - Wie kann ich zwei Methoden vergleichen?

  Alt 29. Aug 2017, 10:25
Angenommen ich nehme mir einen System.Rtti.TVirtualMethodInterceptor für eine fiktive Klasse TMyObject mit u. A. einer public procedure doStuff(); virtual; .

Der Interceptor geht ja hin und "proxified" ja grundsätzlich erst einmal ALLE Methoden derer er habhaft werden kann. In meinen OnBefore, OnAfter und OnException-Events (soweit gesetzt) muss ich ja nun erst einmal prüfen, ob ich gerade überhaupt meine "doStuff"-Methode intercepte. Bislang ist mir nichts besseres eingefallen als ein simpler String-Vergleich wie if (Method.Name = 'doStuff') then .

Gibt es hier keinen besseren Weg (kein String, schnellerer Vergleich), beispielsweise irgendwelche Zeiger zu vergleichen? Method.CodeAddress liefert mir leider nichts was ich sonst irgendwo wiederfinde...


PS: Die Interception-Mechanismen in z.B. Spring4D habe ich bislang nur überflogen. Kann ich dort im Vorhinein sagen dass ich nur bestimmte Methoden (z.B. mit einem Attribut) intercepten will und nicht gleich alle? Das ist doch sicher kein unnormaler Anwendungsfall. Bislang müsste ich dafür die System.Rtti.pas modifizieren.

Geändert von Der schöne Günther (29. Aug 2017 um 10:28 Uhr)
  Mit Zitat antworten Zitat