代码之家  ›  专栏  ›  技术社区  ›  Sertac Akyuz

“方法''%1!''隐藏基类型''%2!''的虚拟方法。”到底隐藏了什么?

  •  5
  • Sertac Akyuz  · 技术社区  · 14 年前

    读完后 Ian Boyd 的构造函数序列问题( 1 , 2 , 3 , 4

    override

    type
      TBase = class
        procedure Proc1; virtual;
        procedure Proc2; virtual;
      end;
    
      TChild = class(TBase)
        procedure Proc1; override;
        procedure Proc2;            // <- [DCC Warning]
      end;
    
    procedure TBase.Proc1;
    begin
      Writeln('Base.Proc1');
    end;
    procedure TBase.Proc2;
    begin
      Writeln('Base.Proc2');
    end;
    
    procedure TChild.Proc1;
    begin
      inherited Proc1;
      Writeln('Child.Proc1');
    end;
    procedure TChild.Proc2;
    begin
      inherited Proc2;
      Writeln('Child.Proc2');
    end;
    
    var
      Base: TBase;
    begin
      Base := TChild.Create;
      Base.Proc1;
      Writeln;
      Base.Proc2;
      Base.Free;
      Readln;
    end.
    




    TChild.Proc2 states that Proc2

    3 回复  |  直到 14 年前
        1
  •  4
  •   Ken Bourassa    14 年前

    TGrandChild = class(TChild) 
      procedure Proc2; override;
    end; 
    

    var 
      Base: TBase; 
      Child : TChild
    begin 
      Child := TChild.Create;
      Base := Child;
      Base.Proc2; 
      Child.Proc2;
    
      Base.Free; 
      Readln; 
    

    Base.Proc2
    Base.Proc2
    Child.Proc2
    

        2
  •  2
  •   Timo    14 年前

        3
  •  2
  •   dwrbudr    14 年前

    使用“reintroduce”取消警告。