I had something like this:

class Bits
{
    int width()
    {
        return _width;
    }

    void width(int _width)
    {
        this._width = _width;
    }

    int _width;
}

class Bool : Bits
{
    // make sure a Boolean is always 1 bit
    override int width()
    {
        assert(_width == 1);
        return _width;
    }
}

I was surprised that I could not do this:

B b = new B;
b.width = 42;

Instead, I had to do this:

B b = new B;
(cast(Bits) b).width = 42;

Or I had to add a redundant setter function to Bool.

Shouldn't the property functions' resolution logic take into account the inherited functions? I had assumed that was the case (and I was confused by misleading error messages), and that seems like the more intuitive semantics to me.

Reply via email to