Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
13. Jan 2012
Das ist grade der Sinn von Interfaces. (also einer davon)
Erstmal Trennung von Schnittstelle und Code.
> Man muß nur die Schnittstelle (die Interfacedeklaration) kennen und es ist unwichtig, was sich dahinter versteckt. (bzw. man muß nicht das Innere verraten)
Und die Freigabe regelt das Interface selber.
> Es zählt wie oft es verwendet wird (wieviele Variablen auf es zeigen) und wenn...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
13. Jan 2012
Dann ist das ein Problem der versteckten Compilermagic.
Wenn der Compiler diesen Cast intern in eine Supports-Anfrage ändert, dann geht das natürlich.
Schade, daß man nicht sieht, ob/wo die Compilermagic einem einen "Streich" speielt.
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
13. Jan 2012
Wenn hier nicht zufällig ein bissl Compilermagic mitspielt, dann definitiv NEIN.
Ein Interface-Zeiger ist kein Objekt-Zeiger, also kann man das nicht einfach so billig umcasten.
Möglichst direkt in die Interfacevariable reinerstellen.
Sobald man auch nur eine Interfacevariable erstellt ht, ist die Zuferlässigkeit von Objektzeigern nicht mehr gegeben, da das Objekt vorzeitig/ungewollt...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
13. Jan 2012
Wenn mit Interfaces gearbeitet wird, dann sollte dieses durchgängig gemacht werden.
class function TStartupManagerFactory.Create(): IStartupProcess;
begin
Result := TBaseStartupProcess.Create();
Result := StartupProcess;
AddStartupCommands(Result);
end;
Standardmäßig ist eine Mischbehandlung nicht sicher, da die Referenzzählung keine Ahnung davon hat, ob irgendwo Variablen Referenzen...