Bischen viel Quote, Sorry
a) Foo auch auf das Interface geben.
b) ein zweiters Interface machen
a) will ich nicht, weil der Konsument da nix zu schreiben hat. und b) Zeig doch bitte Code
ok ich ergänze gleich mal deinen
Delphi-Quellcode:
IFooItem = Interface
['{9995E78E-45DF-4C25-B657-7396738FEA70}']
procedure Bar;
end;
IFooFooItem =Interface
['{9995E78E-45DF-4C25-B657-7396738FEA70}']
procedure Foo(const AValue);
end;
TFooItem = class(TinterfacedObject, IFooItem, IFooFooItem)
public
procedure Bar;
procedure Foo(const AValue);
end;
function CreateItem():IFooItem;
...
function CreateItem():IFooItem;
begin
Item := TFooItem.Create() as IFooItem;
end;
und jetzt der Owner:
Delphi-Quellcode:
TFooOwner = class
private
Fitem: IFooItem
function GetItem: IFooItem
public
property Item: IFooItem getItem;
property FooItem: IFooFooItem GetFooItem;
end;
...
procedure TFooOwner.DoAbc();
var FooFooItem: IFooFooItem;
begin
if not Supports(Item, IFooFooItem) then raise EPanic...;
FooFooItem := Item as IFooFooItem;
FooFooItem.Foo(abc)
end;
Wie wird jetzt die Instanz von FItem gespeichert? Als einzigste Lösung würde mir wieder die ObjektInstanz einfallen und in den Get* Methoden dann ein GetInterface(IFooXItem, Result)aber dann habe ich wieder einen Zugriff auf die Objektinstanz!?!?
Gespeichert als interface. Immer und überall. Vermischen ist böse.
Die beiden interfaces würde ich dann auch nicht in eine
unit packen.