これは、ごくわずかなコーディングで実行可能であることが判明しました。ステートメントDELETEOBJECTTHIS-OBJECTを使用して、そのステートメントを実行しているインスタンスを削除できます。したがって、静的メソッド内にある場合、削除されるのは静的インスタンスです。
METHOD STATIC VOID Reload () :
DELETE OBJECT THIS-OBJECT.
END METHOD.
したがって、新しいバージョンのクラスがある場合は、MyClass:Reload()を使用するだけです。セッションを終了する必要はありません。
名前付きウィジェットプールを削除するために静的メソッドを使用するという彼の提案で私を正しい方向に向けてくれたTimKuehnに感謝します。
この例は、どのように機能させるかを示すために作成しました。以下は、3つの静的メソッドを持つ単純なクラスです。
/* File : rtt/cls/demo.cls */
USING Progress.Lang.*.
ROUTINE-LEVEL ON ERROR UNDO, THROW.
CLASS rtt.cls.demo USE-WIDGET-POOL :
METHOD STATIC CHARACTER SayHello() :
RETURN "Good-bye".
END METHOD.
METHOD STATIC VOID ShowMessage() :
MESSAGE "This is the message." VIEW-AS ALERT-BOX.
END METHOD.
METHOD STATIC VOID Reload() :
DELETE OBJECT this-object.
END METHOD.
END CLASS.
他の人の環境がどのように設定されているかはわかりませんが、私の環境では、プログラムをコンパイルして実行できるようにシステムにログオンする必要があります。つまり、アクティブなセッションがあります。
だから私はファイルをコンパイルします:
COMPILE VALUE(SEARCH("rtt/cls/demo.cls")) SAVE.
次に、プロシージャエディタで次のビットを実行してテストします。
USING rtt.cls.*.
demo:ShowMessage().
MESSAGE demo:SayHello().
これを実行すると、「これはメッセージです。」というメッセージボックスが表示され、続いて「さようなら」というメッセージボックスが表示されます。まさに期待通りです。
しかし、バグがあり、「Good-Bye」ではなく「Hello」と表示されるはずなので、クラスを編集します(変更する2つのメソッドのみを表示しています。
METHOD STATIC CHARACTER SayHello() :
RETURN "Hello".
END METHOD.
METHOD STATIC VOID ShowMessage() :
MESSAGE "That was the message." VIEW-AS ALERT-BOX.
END METHOD.
変更を保存し、以前と同じようにコンパイルして、テストを再実行します。どのようなメッセージが表示されると思いますか?「これがメッセージです」と期待しています。と「さようなら」、前と同じ。これは論理的です。現在のセッションに非表示のウィジェットプールがあり、(最初のテストから)クラスのインスタンスがロードされているためです。インスタンスまたはプールが破棄されるまで、このインスタンスを使用し続けます。そこで、開発環境をシャットダウンし、ログオフしてから再度ログオンして、新しいセッションを開始します。これまでのところ、すべてが期待どおりに機能しています。
今度はテストを再度実行します。確かに、新しいバージョンを取得します。メッセージは「Thatwasthemessage」と「Hello」です。
しかし今、私は「こんにちは」という言葉の後に感嘆符を追加するように言われています。だから私はそれを変更します:
METHOD STATIC CHARACTER SayHello() :
RETURN "Hello!".
END METHOD.
保存してコンパイルします。テストを実行すると、明らかに、感嘆符なしで「こんにちは」と表示されている古いバージョンが表示されます。変更がアクティブになる前に、セッションを再開する必要があります。私は本当にそれを二度とやりたくない。だから私は次のように私のテストを変更します:
USING rtt.cls.*.
demo:Reload().
demo:ShowMessage().
MESSAGE demo:SayHello().
私はそれを実行し、ボイラー、最新の変更を取得します。メッセージを「それがメッセージでした」から「動作します!」に変更します。テストを保存、コンパイル、実行します。何が見えますか?「うまくいく!」と表示されます。編集の合間にセッションを再開する必要はもうありません。私の解決策は私にとって完璧に機能します。
いろいろ試してみましたが、「静的メンバー(15071)からTHIS-OBJECTまたはSUPERを参照できません」というエラーが表示されません。