Is there a keyword to access the base class

Ali Çehreli acehreli at yahoo.com
Tue Jun 18 15:15:51 PDT 2013


On 06/18/2013 03:10 PM, Stephen Jones wrote:
> I am trying to do this:
>
> import std.stdio;
> import std.conv;
>
> class Bar{
> }
>
> class Foo : Bar{
>      int val = 10;
> }
> class Foos : Bar{
>      int val = 20;
>      string str = "some more memory";
> }
>
> void main(){
>      Bar[] bars;
>
>      bars ~= new Foo();
>      bars ~= new Foos();
>
>      foreach(Bar b; bars){
>          //writeln(b.val);//error: no property 'val' for type 'mod.Bar'
>      }
>
>      writeln(to!(Foo)(bars[0]).val);//works
> }
>
> The problem is that I have to cast each Bar instance to its base class
> (Foo, Foos) before the compiler recognizes the val variable. Is there
> some syntax or keyword to allow me to specify that the b in the foreach
> loop refers to the base class not the super, such as writeln(b.base.val);
>
> I know I can cast, but how do I know what base class each b in the
> foreach loop is?
>

val() must appear on Bar. I made it an interface:

interface Bar{
     int val();
}

class Foo : Bar{
     int val_ = 10;

     int val() {
         return val_;
     }
}
class Foos : Bar{
     int val_ = 20;
     string str = "some more memory";

     int val() {
         return val_;
     }
}

Ali



More information about the Digitalmars-d-learn mailing list