Einzelnen Beitrag anzeigen

Benutzerbild von Linor
Linor

Registriert seit: 19. Mai 2008
Ort: Holzwickede
60 Beiträge
 
Delphi 2010 Professional
 
#1

Klasse auf Interface testen

  Alt 18. Okt 2010, 15:45
Delphi-Version: 2010
Hallo Zusammen,

auch wenn diese Frage des öfteren kam, eine konkrete Lösung habe ich bis jetzt nicht gefunden, auch ein Workaround wäre schon nett

Also folgendes:
Delphi-Quellcode:
TBasis = class
   procedure DoSomething;
end;

TNachfahre = class(TBasis, IMyInterface)
   procedure DoNachfahre;
end;

procedure TBasis.DoSomething;
begin
   if ( Supports(Self, IMyInterface) ) then
      DoSomethingElse;
end;

procedure TNachfahre. DoNachfahre;
begin
   ...
end;

procedure UndLos;
var
   n: TNachfahre;
begin
   n := TNachfahre.Create;
   n.DoSomething;

   n.DoNachfahre; // Exception!
end;
Ich bin mir bewusst das Supports oben die Klassenreferenz (Self) in ein IMyInterface umwandelt, nur ich möchte an dieser Stelle nur eine Entscheidung treffen wenn das Interface unterstützt wird, die Referenz auf das Interface interessiert mich da nicht die Bohne. Denkbar wäre auch Supports mehrere male aufzurufen, was aber nicht geht, da Self nach dem verlassen von DoSomething zerstört ist und beim verlassen auch das Interface gekilled wird.

Wie ich oben schon schrieb, suche ich kein warum sondern ein wie!?

Also das sowas möglich wäre:
Delphi-Quellcode:
procedure TBasis.DoSomething;
begin
   if ( Supports(Self, IMyInterface) ) then
      DoSomethingElse;
   if ( Supports(Self, IMyOtherInterface) ) then
      DoSomethingDifferent;
end;
Im Grunde analog zu:
Delphi-Quellcode:
procedure TBasis.DoSomething;
begin
   if ( Self is TMyClass ) then
      DoSomethingElse;
   if ( Self is TMyOtherClass ) then
      DoSomethingDifferent;
end;
Gruß, Kai
Imabas - see you on http://www.pixandmore.de

Geändert von Linor (18. Okt 2010 um 18:15 Uhr)
  Mit Zitat antworten Zitat