Nochwas ist mir aufgefallen
Delphi-Quellcode:
Function ITGetItem( Index: Integer ): TGUID; StdCall;
Function ITGetRefItem( Index: Integer ): TGUID; StdCall;
du gibts in diesen Methoden einen "komplexen" Datentyp zurück. Das ist bei Interfaces eher unerwünscht. Normalerweise sollte man Interface so konstruieren das sie HResult zurückgeben oder Bool um anzuzeigen das die Funktion fehlgeschlagen oder nicht fehlgeschlagen ist. Komplexere Datentypen gibt man bei Interfaces als Parameter -> out -> zurück. Dies ist nun kein "muß" und Ausnahmen bestätigen die Regel aber es ist eine sinnvolle Designrichtlinie. Ja ich weis das dann indizierte Properties nicht möglich sind, was ich bei Interfaces ohne Sichtbarkeitskapselungen per private/protected etc.pp. eh als sinnlose Erfindung der Bolandianer erachte. Sogesehen empfinde ich deine Konstruktion per indizierter Property -> ITGetItem() etc.pp. als dem Interface-Konzept widersprechend. Interfaces sollen eigentlich ausschließlich nur das deklarieren was public sichtbar sein soll. Deine .GetItem() Methode ist aber eine implementierende Schnittstelle und müsste normalerweise unsichtbar im Interface sein. Da dies Borland aber nicht bei Interfaces unterstützt halte ich es für besser komplett auf dieses Property-Sprachkonstrukt bei Interfaces zu verzichten. Das macht die Schnittstelle letzendlich kompakter, übersichtlicher und somit besser wartbar. Anders ausgedrückt: weniger ist manchesmal mehr, man muß nicht jedes mögliche Sprachkonstrukt benutzen
Gruß Hagen