On 15/01/2011 11:09, Torsten Bonde Christiansen wrote:

    Is it possible to jump a couple of levels in the inherited
    hierarchy when calling "inherited" on a method?


Hmm, don't know whether you're the same person or not :), but I replied in a stackoverflow question the next day after it was asked (see here: http://stackoverflow.com/questions/4662744/delphi-how-to-call-inherited-inherited-ancestor/4670457#4670457 ) and it looked like the host didn't notice :). At least this variant seemed to work

I'm sorry to say that it is not I who wrote on stackoverflow, but could as well have been. Anyways, your solution does not really solve the problem, since i will have to introduce a HackedParent class and that kinds of defeat the purpose. All I really want is to skip to a grandparent class using the normal "inherited" functionality. I have tried to look through the mailinglist archive, because I seem to remember someone else might have asked this question as well - but I haven't been able to find anything (yet).
Here is another "solution" (another hack):


program Project1;
{$mode objfpc}{$H+}

type

  { TFoo }

  TFoo = class
  protected
    procedure DoHello; virtual;
  end;

  { TFooChild }

  TFooChild = class(TFoo)
  protected
  end;

  { TFooGrandChild }

  TFooGrandChild = class(TFooChild)
  protected
    procedure DoHello; override; // to be skipped
  end;

  { TFooGreatGrandChild }

  TFooGreatGrandChild = class(TFooGrandChild)
  protected
    procedure DoHello; override;
  end;

{ TFoo }

procedure TFoo.DoHello;
begin
  writeln('TFoo');
end;

{ TFooGrandChild }

procedure TFooGrandChild.DoHello;
begin
  writeln('TFooGrandChild');
  inherited DoHello;
end;

{ TFooGreatGrandChild }

procedure TFooGreatGrandChild.DoHello;
var
  a: procedure of object;
begin
  writeln('TFooGreatGrandChild');
  //inherited DoHello;
  TMethod(a).Code := @TFooChild.DoHello;
  TMethod(a).Data:= Self;
  a();
end;

var
  a: TFoo;
begin
  a := TFooGreatGrandChild.Create;
  a.DoHello;
  readln;
end.

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to