Wobei man Ableitungen von Interfaces eher vermeiden sollte. Hier werden ja eher Funktionalitäten beschrieben und dabei ist es i.d.R. sinnvoll, viele kleine eigenständige Funktionalitäten (Interfaces) zu definieren als von anderen abzuleiten.
Du hast mir gerade einen Anreiz gegeben, mein noch am Anfang stehendes Projekt nochmal etwas umzustrukturieren. Allerdings habe ich da dann gerade ein Verständnisproblem.
Folgender Fall:
Delphi-Quellcode:
IMyIntf1 = interface(IInterface)
procedure SomeMethod1();
procedure SomeMethod2();
end;
IMyIntf2 = interface(IMyIntf1) // Hier noch abgeleitet von IMyIntf1
procedure SomeMethod3();
end;
Delphi-Quellcode:
TMyClass = class(TInterfacedObject, IMyIntf1, IMyIntf2) // Hier könnte man IMyIntf1 ja denke ich auch weglassen
procedure SomeMethod1();
procedure SomeMethod2();
procedure SomeMethod3();
end;
Delphi-Quellcode:
TMyOtherClass = class(TObject)
type
private
MyIntfInstance: IMyIntf2; // Hier die 2 beachten
procedure CallInterfaceMethod;
end;
implementation
procedure TMyOtherClass.CallInterfaceMethod;
begin
MyIntfInstance.SomeMethod1(); // Hier die 1 beachten.
end;
In dem Konstrukt mit der Ableitung des Interfaces 2 von 1 ist das oben gezeigte Beispiel kein Problem. Wenn ich aber jetzt
IMyIntf2
gesondert behandele und in TMyClass implementiere, dann erhalte ich ja eine Fehlermeldung, dass
SomeMethod1()
in dem Kontext nicht verfügbar ist.
Nur wie löse ich jetzt das Problem? Ich will ja jetzt nicht so viele Interfacevariablen in meiner Klasse anlegen, wie meine Interfaceklasse Interfaces importiert. Das halte ich für sehr umständlich. Ich kenne zwar vom Hören die Methode Supports(), weiß aber nicht, in wiefern das darauf anzuwenden ist.
Hat da jemand einen Tipp?