Einzelnen Beitrag anzeigen

Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#57

AW: Na, schon Delphi XE gekauft?

  Alt 1. Sep 2010, 08:45
Bin gerade durch diesen Blog Eintrag auf TVirtualMethodInterceptor aus der Rtti.pas aufmerksam geworden. Endlich!!! Delphi kann nun AOP (wenn auch eingeschränkt und nicht komplett bugfrei)

Beispiel:
Delphi-Quellcode:
type
  TFoo = class
  public
    procedure Bar; virtual;
  end;

procedure InterceptorBefore(Instance: TObject; Method: TRttiMethod;
  const Args: TArray<TValue>; out DoInvoke: Boolean; out Result: TValue);
begin
  ShowMessage('Before: ' + Instance.ClassName + '.' + Method.Name);
end;

procedure InterceptorAfter(Instance: TObject; Method: TRttiMethod;
  const Args: TArray<TValue>; var Result: TValue);
begin
  ShowMessage('After: ' + Instance.ClassName + '.' + Method.Name);
end;

{ TFoo }

procedure TFoo.Bar;
begin
  ShowMessage('TFoo.Bar');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  interceptor: TVirtualMethodInterceptor;
  foo: TFoo;
begin
  foo := TFoo.Create;

  interceptor := TVirtualMethodInterceptor.Create(TFoo);
  interceptor.Proxify(foo);
  interceptor.OnBefore := InterceptorBefore;
  interceptor.OnAfter := InterceptorAfter;

  foo.Bar;

end;
Klasse Sache das (hab mich schon ne Weile mit AOP in Delphi und den Möglichkeiten beschäftigt). Ist leider nur ein experimenteller Status soweit ich das bei nem ersten Test sehen konnte, weil beim freigeben des Objekts noch AV oder andere Exceptions geworfen werden (liegt wohl daran, dass ausnahmslos alle virtuellen Methoden intercepted werden, was nicht so gesund ist)

Aber immerhin das erste Feature in Delphi XE, was mich begeistert.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat