n'abend,
ist es nur Zufall, oder haben abgeleitete Interfaces in den Objekten wirklich "immer" die selben Referenzen?
Auch in anderen Plattformen und nicht nur im Windows.
Delphi-Quellcode:
type
IFoo = interface
['{05C90FF9-4788-49FB-9C60-CA901F8BBEBA}']
procedure Foo;
end;
IBar = interface(IFoo)
['{01B62A8B-40E4-417C-AC63-F787C26DA89F}']
procedure Bar;
end;
IBlubb = interface
['{A35EE740-965E-4F97-9AC2-A99F165B0322}']
procedure Foo;
end;
TFooBar = class(TInterfacedObject, IBar, IFoo, IBlubb)
procedure Bar;
procedure Foo;
end;
procedure TForm3.FormCreate(Sender: TObject);
var
F: IFoo;
B: IBar;
X: IBlubb;
begin
B := TFooBar.Create as IBar;
F := B;
Memo1.Lines.Add(Format('$%p $%p', [Pointer(B), Pointer(F)]));
F := B as IFoo;
Memo1.Lines.Add(Format('$%p $%p', [Pointer(B), Pointer(F)]));
F := TFooBar.Create as IFoo;
B := F as IBar;
Memo1.Lines.Add(Format('$%p $%p', [Pointer(F), Pointer(B)]));
X := B as IBlubb;
Memo1.Lines.Add(Format('$%p $%p', [Pointer(F), Pointer(X)]));
end;
procedure TFooBar.Bar;
begin
end;
procedure TFooBar.Foo;
begin
end;
Im Grunde geht es darum, ob bei
procedure Test(Ref: IFoo);
die Interfaces immer die selbe Referenz besitzen
und man dieses "Objekt" somit immer zuverlässig in Listen finden kann oder ob ich doch besser immer die interen Objekt-Referenzen vergleichen muß,
bzw. ob ich zu Beginn immer das Interface geziehlt auf ein Bestimmtes casten (Supports/AS) sollte.