Interaction of inheritance with property functions

Luís Marques luis at luismarques.eu
Fri Jun 8 01:07:17 UTC 2018


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.


More information about the Digitalmars-d mailing list