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

Reply via email to