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;