Hallo Hagen,
nach Deinem Ansatz von oben und der daraus abgeleiteten Implementierung:
Delphi-Quellcode:
type
IMyBaseInterface = interface
['{3F3E45E4-3FD4-4326-A2FE-637339B4E8A9}']
end;
IMyInterfaceA = interface
end;
IMyInterfaceB = interface
end;
TMyBaseClass = class(TInterfacedObject, IMyBaseInterface)
end;
TMyClassA = class(TMyBaseClass, IMyInterfaceA)
end;
TMyClassB = class(TMyBaseClass, IMyInterfaceB)
end;
var
myRefToInterfaceA : IMyInterfaceA;
myRefToInterfaceB : IMyInterfaceB;
myCompareRefA : IMyBaseInterface;
myCompareRefB : IMyBaseInterface;
begin
myRefToInterfaceA := TMyClassA.Create;
myRefToInterfaceB := TMyClassB.Create;
myCompareRefA := myRefToInterfaceA as IMyBaseInterface;
myCompareRefB := myRefToInterfaceB as IMyBaseInterface;
ergibt der Vergleich
Result := myCompareRefA = myCompareRefB
entgegen Deiner Aussage immer
False, weil die beiden erzeugten Exemplare (unabhängig davon, ob sie Exemplare unterschiedlicher Klassen, einen gemeinsamen Vorfahren, der besagtes Interface
IMyBaseInterface implementiert, besitzen oder derselben Klasse angehören), weil sie voneinandert verschiedene Identitäten haben.
Innerhalb einer Schnittstellenreferenz ist (indirekt) die "Methodentabelle" der Klasse zur Realisierung des Interfaces und die Identität des Objekts codiert. Wäre dies nicht so und zeigte
myCompareRefA für jedes Exemplar der Klasse
TMyClassA auf dieselbe Adresse, wäre die Verwendung der Pseudovariablen
Self innerhalb von so referenzierten Methoden nicht möglich...
Ich hoffe, dass ich Dich richig verstanden und nicht am Thema vorbeigeschrieben habe