Einzelnen Beitrag anzeigen

dpg123

Registriert seit: 13. Apr 2015
22 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Zuweisung eines Methodenzeigers bei vererbten Interfaces

  Alt 21. Apr 2017, 14:00
Verstehe ich richtig, dass Du prüfen willst, ob Dein Objekt nicht nur IInterfB sondern auch IInterfA unterstützt?

Dann ginge das vielleicht so:

Delphi-Quellcode:
TImplB = class(TInterfacedObject, IInterfB, IInterfA)

...
var
  lA: IInterfA;

if Supports(lB, IInterfB, lA) then
  DoSomething(lA);
Das geht mit jedem Interface, unabhängig davon, ob es sich um Ableitungen handelt oder nicht.
Die Signatur von MInterfA = function(): IInterfA of object; unterscheidet sich von function factoryB(): IInterfB; ja nur durch einen "Downcast". Meiner Meinung eine gültige Zuweisung, bzw. ein legitimes Design.

Der Compiler lässt mich keine direkte Zuweisung machen: Self.getInterfA := self.factoryB; Dafür könnte es ja Gründe geben, die ich nicht verstehe/kenne, aber gerne wissen würde. Daher meine Fragen nach der einfachsten Art der Zuweisung und ob es Argumente gibt, dies nicht zu tun, bzw was dabei zu beachten ist.

Geändert von dpg123 (21. Apr 2017 um 14:10 Uhr)
  Mit Zitat antworten Zitat