これによると、private/protectedメンバであっても"Self."で修飾することでアクセスできる、と書かれています。なんですと?ということでDelphi 2007以降の各バージョンで確認してみました。
- Delphi 2007: "Self."の有無に関わらずpublicのみアクセス可能
- Delphi 2009: "Self."とすることでprivateはアクセスできるがなぜかprotectedはアクセス不可
- Delphi 2010/XE/XE2: "Self."とすることでprivate/protectedもアクセス可能
またクラス ヘルパとレコード ヘルパ(Delphi)には
ただし、ソース コードの任意の場所で適用されるヘルパの数は、0 または 1 つだけです。
type
identifierName = class|record helper [(ancestor list)] for TypeIdentifierName
memberList
end;
type TFooHelper = class helper for TFoo public procedure Bar1; end; TFooHelperEx = class helper (TFooHelper) for TFoo public procedure Bar2; end; var Foo: TFoo; begin ... Foo.Bar1; // TFooHelper.Bar1 Foo.Bar2; // TFooHelperEx.Bar2 ...
こんな感じです。
2020/09/23追記: Mat DeLongさんの記事のリンクを更新しました。pmcgeeさん、情報ありがとうございます。
2 件のコメント:
Mat DeLong now ... https://mathewdelong.wordpress.com/2011/11/08/gaining-access-to-private-fields-of-a-class-in-delphi/
Hi pmcgee, Thank you for your information. I update some links.
コメントを投稿