Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
1. Mär 2024
Wie jetzt.
Meckert Heult der nur rum (Info oder Warning), oder stoppt er wirklich die Arbeit (Error oder Fatal) ?
Du kannst versuchen das "normale" Create nach oben zu verschieben, aber oft bleibt nichts Übrig, als diese "unsinnige" Meldung via Reintroduce loszuwerden.
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
27. Feb 2024
Warum nicht?
siehe TObject.Create und TComponent.Create :angle:
Ob man beim "Verdecken" micht einem neuen Contructor noch ein reintroduce benötigt, das mehrkt man dann schon.
Bei gleicher Signatur (Parameter) geht nur verdecken. Und ansonsten muß man noch überlegen, ob ein overload benötigt wird, um alternativ auch die Constructoren der Vorfahren aufrufen zu können.
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
27. Feb 2024
Ja, seit einer ganzen Weile existiert ein virtuelles Interface, welches TInterface nach TObject casten kann, z.B. einfach mit AS. (seit mindestens D2009/XE)
Ansonsten implementiert TComponent schon seit vielen Jahren auch noch ein IInterfaceComponentReference, welches eine Methode GetComponent bietet.
IInterfaceComponentReference.GetComponent
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
27. Feb 2024
Das macht Delphi der immer, Managed Types automatisch aufräumen.
Interface, Variant, LongStrings (WideString und alle Delphi-Strings, außer ShortString-Typen) und dynamische Arrays.
Im Falle von Interface-Variablen wird bei <>nil ein intf._Release ausgeführt und die Variable quasi auf nil gesetzt.
Wurde also das TObjekt bereits freigegeben (Destroy/Free aufgerufen, oder dessen Owner oder...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
27. Feb 2024
Eigentlich ja, aber nein.
TComponent besitzt eine Standardimplementation für Interfaces und in Dieser ist die Referenzzählung des Interfaces inktiv.
Interfaces auf TComponent sollten daher immer nur kurzfristig verwendet und dann freigegeben (NIL gesetzt, bzw. Variable läuft aus dem Scope).