System (クラス・キーワード)
使用法
クラスのコンパイル順序に影響を与えるには、以下のような構文を使用します。
Class MyApp.Person Extends %Persistent [ System = n ]
{ //class members }
n は 0 ~ 4 の整数であり、各クラスは、割り当てられた正の値が小さい順にコンパイルされます。0 の値が割り当てられたクラスは最後にコンパイルされます。
詳細
このキーワードによってクラスのグループが形成され、各グループには異なる値と優先度が関連付けられ、完全クラス・コンパイル・プロセスは各優先度レベルについて実行されてから、次の優先度レベルに進みます。優先度が高い順に、以下のレベルがあります。
-
1
-
2
-
3
-
4
-
0 (既定値)
クラス・コンパイルは次の 2 つの手順から成ります。
-
グローバルを解決します。
-
ルーチンをコンパイルします。
同じ System キーワード値を持つすべてのクラスでは、それぞれのグローバルが解決されてからルーチンがコンパイルされます。それぞれのレベルが異なるクラスでは、優先度の高いクラスでグローバル解決とルーチン・コンパイルの両方が完了してから、優先度の低いクラスでグローバルが解決されます。
CompileAfter キーワードと DependsOn キーワードは、共通の System 値を持つクラス内で機能して、グローバル解決の順序を決定します。共通の System 値を持つすべてのクラスでグローバルが解決された後に、これらすべてのクラスでルーチンがコンパイルされます。
このため、クラス B がクラス A のメソッドをクラス B のメソッド・ジェネレータ内で (つまり B のコンパイル時に) 実行する必要がある場合、A の優先度は B の優先度より高い必要があります。これは、A の System キーワードの値は、B の System キーワード値より小さい 0 以外の整数である必要があるということです。この動作を実現するうえで、CompileAfter や DependsOn は無関係です。
サブクラスへの影響
このキーワードは継承されません。
既定値
既定値は 0 (ゼロ) です。