x1020: クラス '%s' のインスタンスを作成していますが,このクラスは抽象メソッド '%s.%s' を含みます (Delphi)

提供: RAD Studio
移動先: 案内検索

エラーと警告のメッセージ(Delphi) への移動


コンパイル中のコードは抽象メソッドを持ったクラスのインスタンスを作成しようとしています。


program Produce;
(*$WARNINGS ON*)
(*$HINTS ON*)

  type
    Base = class
      procedure Abstraction; virtual; abstract;
    end;

  var
    b : Base;

begin
  b := Base.Create;
end.

{ 抽象手続きは実体が存在しないので,抽象手続きを持ったクラスのインスタンスを作成することは危険である。この例では b の作成が警告の原因である。ここで作成した b のインスタンスを通して Abstraction を呼び出すと実行時エラーになる。b へ代入した値は決して使用されないというヒントが表示される }


program Solve;
(*$WARNINGS ON*)
(*$HINTS ON*)

  type
    Base = class
      procedure Abstraction; virtual;
    end;

  var
    b : Base;

  procedure Base.Abstraction;
  begin
  end;

begin
  b := Base.Create;
end.

{ ここに示すように,手続き宣言から abstract 指令を削除するのがこの問題の 1 つの解決方法である。もう 1 つの方法としては Base からクラスを派生させ,その後に Abstraction の具体的なバージョンを指定する。b へ代入した値は決して使用されないというヒントが表示される }