毎日Learning

学んだことを共有します

Delphiでリフレクションするぞ

Javaでリフレクションしたことあるし、Delphiでもしてーなーって。
っていうか、この仕様を実装するならリフレクションっしょ。
ってな感じで調べたー。

Delphiでリフレクションするには、まず、TRttiContextクラスをインスタンス化する。
ほいで、TRttiContextのメソッドにクラスタイプを指定して、クラスを特定する。

uses
  SysUtils, Rtti;
 
var
  LContext: TRttiContext;
  LType: TRttiType;
 
begin
  LContext := TRttiContext.Create();
  try
    LType := LContext.GetType('クラス名');
  finally
    LContext.Free;
  end;

end;

みたいな。

ほいで、LTypeに対してメソッドやらフィールドやらプロパティやらちょーだいーゆーて。

var
  LMethod: TRttiMethod;
  LField: TRttiField;
  LProperty: TRttiProperty;

begin
  LMethod := LType.GetMethod('メソッド名');
  LField := LType.GetField('フィールド名');
  LProperty := LType.GetProperty('プロパティ名');

end;

ほいで、あとは、
LMethodをInvokeして実行したり、
LFieldをGetValueしたり、
LPropertyにSetValueしたり。

いろいろできちゃう下地ができましたよーってな感じで、以上。