On Wednesday, 4 April 2018 at 10:41:52 UTC, Simen Kjærås wrote:
Because by the time B's constructor is called, A might already have initialized it, and rely on it never changing.
What about:

```
class A
{
    immutable int i;

    this(){}
}

class B : A
{
    this()
    {
        this.i = 3;
        super();              // <- specifically calling
                              //    super constructor afterwards
    }
}

void main()
{
        auto b = new B;
}
```

Same result

The solution is to add a constructor overload to A, and call that from B:

class A
{
    immutable int i;

    protected this(int i) {
        this.i = i;
    }
}

class B : A
{
    this()
    {
        super(3);
    }
}

unittest
{
    auto b = new B;
}

--
  Simen

This becomes a bit hideous, unfortunately, when there are many initializations involved.

Found this, but it doesn't mention anything about derived classes..
https://dlang.org/spec/class.html#field-init

Reply via email to