TStringListのヘルパーを書いたとしましょう
TslHelper = class helper for TStringList
function DoSth: boolean;
end;
次に、このヘルパー(ヘルパーが定義されているユニット)を使用したいユニットに含めました。デバッグ中にCtrl+F7を押して、評価したい:
someStringList.DoSth
私はそれを動作させることができません。出来ますか?
クラスヘルパーは、現在のスコープに新しいメソッドを導入します。クラスヘルパーがスコープ内にない場合、ヘルプするクラスがスコープ内にある場合でも、そのメソッドは有効になりません。したがって、それを機能させるための最初のステップは、それTslHelper
がプログラムの現在の時点で有効になるクラスヘルパーであることを確認することです。
その要件を満たしていても機能しない場合は、デバッガーがクラスヘルパーを認識しない可能性があります。とにかくそれらは少しハックなので、デバッガーがそれらを認識しなくても私はそれほど驚かないでしょう。最終的に、クラスヘルパーは単なる構文糖衣です。上記のクラスヘルパーは、次のようにスタンドアロン関数と同じくらい簡単に作成できます。
function TStringList_DoSth(SL: TStringList): Boolean;
メソッドの現在の実装を使用してその関数を記述し、次に関数を使用してクラスヘルパーを実装します。
function TslHelper.DoSth: Boolean;
begin
TStringList_DoSth(Self);
end;
通常のコードで引き続きclass-helperメソッドを呼び出すことができますが、デバッガーでスタンドアロン関数にフォールバックすることができます。