E2096 メソッド識別子が必要です (Delphi)

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

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

このエラーメッセージは以下のような場合に表示されます。

  • automated 部内のプロパティがアクセス用のメソッドを使用しなければならず,read 節または write 節の中のフィールドを使用できない
  • 「ClassType.MethodName」の構文を使ってクラスメソッドを呼び出そうとしたが,「MethodName」がメソッド名でなかった
  • 「inherited MethodName」の構文を使って継承メソッドを呼び出そうとしたが,「MethodName」がメソッド名でなかった


program Produce;

type
  TMyBase = class
    Field: Integer;
  end;
  TMyDerived = class (TMyBase)
    Field: Integer;
    function Get: Integer;
  Automated
    property Prop: Integer read Field;    (*<-- ここでエラーメッセージ*)
  end;

function TMyDerived.Get: Integer;
begin
  Result := TMyBase.Field;                (*<-- ここでエラーメッセージ*)
end;

begin
end.

{ このコードはフィールドに直接アクセスする Automated プロパティを宣言しようとしている。2 番めのエラーは基本クラスのフィールドを取得しようとしたのが原因である }


program Solve;

type
  TMyBase = class
    Field: Integer;
  end;
  TMyDerived = class (TMyBase)
    Field: Integer;
    function Get: Integer;
  Automated
    property Prop: Integer read Get;
  end;

function TMyDerived.Get: Integer;
begin
  Result := TMyBase(Self).Field;
end;

begin
  Writeln( TMyDerived.Create.Prop );
end.

{ 最初の問題はメソッドを通してフィールドにアクセスすれば解決できる。2 番めの問題は Self ポインタを基本クラス型へキャストし,そこからフィールドにアクセスすれば解決する }