On Sat, Jan 12, 2019 at 8:45 PM Martin Frb via lazarus <lazarus@lists.lazarus-ide.org> wrote: > > On 12/01/2019 22:54, Martok via lazarus wrote: > > Am 12.01.2019 um 22:28 schrieb Martin Frb via lazarus: > >> Same for constructors, if the parent constructor changes its argument > >> list, it will no longer be called. > > It does generate code, but it calls *any* inherited constructor that > > matches the > > signature: > > > > type > > TA = class > > constructor Create(extra:Boolean); > > end; > > TB = class(TA) > > constructor Create; > > end; > > > > constructor TA.Create(extra: Boolean); > > begin > > inherited Create; > > WriteLn('TA.Create'); > > end; > > constructor TB.Create; > > begin > > inherited; // calls TObject.Create! > because TObject has a matching constructor. > > Imagine it was > > constructor TB.Create(extra: integer); > > but was changed it TA.
IMHO, `inherited;` and `inherited Create;` should be the same behavior. I don't use just `inherited;` and it isn't an issue for me, but it looks like an inconsistency on the language. Using the example, both constructors _must_ call TObject.Create because `TA` haven't used `reintroduce` for the constructor. Marcos Douglas -- _______________________________________________ lazarus mailing list lazarus@lists.lazarus-ide.org https://lists.lazarus-ide.org/listinfo/lazarus