E2170 非仮想メソッドはオーバーライドできません (Object Pascal)

提供: Appmethod Topics
移動先: 案内検索

エラーと警告のメッセージ(Object Pascal):インデックス への移動

派生クラスの中で,仮想型として宣言されていない基本メソッドをオーバーライドしようとしました。


program Produce;

  type
    Base = class
      procedure StaticMethod;
    end;

    Derived = class (Base)
      procedure StaticMethod; override;
    end;

    procedure Base.StaticMethod;
    begin
    end;

    procedure Derived.StaticMethod;
    begin
    end;

begin
end.

{ このコードがエラーになる理由は Base.StaticMethod が仮想メソッドとして宣言されておらず,したがってその宣言をオーバーライドできないためである }


program Solve;

  type
    Base = class
      procedure StaticMethod;
    end;

    Derived = class (Base)
      procedure StaticMethod;
    end;

    procedure Base.StaticMethod;
    begin
    end;

    procedure Derived.StaticMethod;
    begin
    end;

begin
end.

{ 基本クラスのソースコードを持っていない場合,このエラーをプログラムから取り除くには派生メソッドの宣言から override の指定を削除するのがただ 1 つの方法である。基本クラスのソースがある場合には,慎重に考慮した後,基本クラスのメソッドを変更して仮想型の 1 つとして宣言する。ただし,そのような変更はプログラムに大きな影響を及ぼすので注意しなければならない }