1

TStringListのヘルパーを書いたとしましょう

TslHelper = class helper for TStringList
  function DoSth: boolean;
end;

次に、このヘルパー(ヘルパーが定義されているユニット)を使用したいユニットに含めました。デバッグ中にCtrl+F7を押して、評価したい:

someStringList.DoSth

私はそれを動作させることができません。出来ますか?

4

1 に答える 1

3

クラスヘルパーは、現在のスコープに新しいメソッドを導入します。クラスヘルパーがスコープ内にない場合、ヘルプするクラスがスコープ内にある場合でも、そのメソッドは有効になりません。したがって、それを機能させるための最初のステップは、それTslHelperがプログラムの現在の時点で有効になるクラスヘルパーであることを確認することです。

その要件を満たしていても機能しない場合は、デバッガーがクラスヘルパーを認識しない可能性があります。とにかくそれらは少しハックなので、デバッガーがそれらを認識しなくても私はそれほど驚かないでしょう。最終的に、クラスヘルパーは単なる構文糖衣です。上記のクラスヘルパーは、次のようにスタンドアロン関数と同じくらい簡単に作成できます。

function TStringList_DoSth(SL: TStringList): Boolean;

メソッドの現在の実装を使用してその関数を記述し、次に関数を使用してクラスヘルパーを実装します。

function TslHelper.DoSth: Boolean;
begin
  TStringList_DoSth(Self);
end;

通常のコードで引き続きclass-helperメソッドを呼び出すことができますが、デバッガーでスタンドアロン関数にフォールバックすることができます。

于 2009-09-03T14:47:12.897 に答える