Einzelnen Beitrag anzeigen

Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#15

Re: Interface referenzen auf gleichheit prüfen?

  Alt 13. Okt 2004, 11:42
Jungs, ihr seid gold wert

Da hab ich ja genau die richtigen erwischt, um diese oberflächlich simple frage zu diskutieren. Tut mir leid, dass ich erst jetzt von mir hören lassen. Ihr wisst ja wie das ist, wenn man viel zu tun hat ( ).

Da ihr ja hier ganze romane geschrieben habt, kann ich leider nicht auf alles eingehen, freue mich aber über die tiefe eurer diskussion. Finde man sollte solche diskusionen in eine gesonderte sparte verschieben, damit sie nicht zwischen dan ganzen 'wieso geht diese komponente nicht so wie ich will'-themen untergeht

Zum thema:

Ich bin dabei ein spezielles modell zu entwickeln, das nach aussen (für die view schicht) nur aus interfaces besteht. Dabei ist es notwendig, dass ich auch eines dieser interfaces zur identifikation nutzen kann. ZB. um über ein assozioativen array, andere objekte addressieren zu können. Um jetzt das gesuchte object zu finden, muss ich besprochene identität vergleichen können, was zunächst, überraschenderweisen, fehl schlug...

Zitat von choose:
Hallo Maximov,

wie Hagen bereits dargestellt hat, handelt es sich bei Schnittstellen (Interfaces) um unterschiedliche "Sichten" auf ein und dasselbe Objekt. Weil die Identität eines Objekts jedoch ein Wesensmerkmal darstellt, scheint es tatsächlich überaschend, dass der von Dir diskutierte Code bei einen Vergleich der Art
Delphi-Quellcode:
myObj := TMyClass.Create;
myRefToInterfaceA := myObj;
myRefToInterfaceBA := myObj;
Result := Pointer(myRefToInterfaceA) = Pointer(myRefToInterfaceB);
den Wert False zurückgibt.
...
genau...dann fiel mir natürlich auch ein, dass ein interface nur etwas über den zugriff auf ein objekt aussagt, aber leider nicht über das objekt selbst. Ínsofern habt ihr recht, wenn ihr sagt, dass ich mein konzept überdenken sollte (mach ich natürlich auch). Allerdings kommt es letztendlich auf das ergebnis an und ich wäre durchaus bereit einige annahmen zu akzeptieren, die 'typisch delphi' sind.

Zitat:
...
Was Du also machen kannst, wenn Du ohne "Identitätsinterface", wie Hagen es vorschlägt, an die Identität der Objekte zweier unterschiedlicher Interfaces herankommen möchtest, ist der Cast auf auf ein gemeinsames Interface, z.B. IInterface, und der anschließende Vergleich der Art
Result := (myRefToAnInterface as IInterface) = (myRefToAnotherInterface as IInterface)
Dies liefert bei mir, auf den ersten blick, sehr brauchbare ergebnisse und beantwortet im prinzip meine frage, da in meinem fall das eine interface von dem anderen erbt. Habt das aber noch nicht eingehend getestet.

Bei dieser möglichkeit, die ihr ja teilweise für problematisch haltet, werden im hintergrund nun einige sachen gemacht, unter anderem vermutlich auch _Addreff, _Release und QueryInterface. Da stellt sich mir natürlich die frage, ob die nutzung eines identitäts-interfaces nicht grundsätzlich schneller wäre? zumal auch komzeptionell sauberer.

Vielen dank vorerst!
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat