-
CREATE STATIC
CREATE STATIC |
これらのキーワードをクラスファイルの先頭に単独で配置すると、クラス名に非静的シンボルを適用するとその場で自動的に隠されたインスタンスが作成されることをインタプリタに伝えます。
![]() |
この機能を使用すると、クラスコンストラクタ(特別なメソッド_new)がパラメータなしで呼び出されます。 |
この機能はすでに Form クラスと Settings クラスによって内部的に使用されています。
これがSettingsクラスのコードの抜粋です。
Example: Settings.class (gb.settings)
Export
Create Static
' ...
Public Sub _new(Optional Path As String, Optional Title As String)
' ...
If Not Path Then
Path = Settings.DefaultDir &/ Application.Name & ".conf"
Explanation
Gambasコードの次の行を見てください。
Print Settings["Key"]
配列のアクセサメソッド_get() がSettingsクラスに適用されてキー "Key"に対応する値を取得しているように見えますが、Settingsの_get()メソッドは static ではなく動的なので意味がありません。 それはクラスに属しているのではなく、クラスのあるオブジェクトに属しています。 しかし、SettingsはCREATE STATICなので、インタプリタは舞台裏でSettingsクラスの自動インスタンスを作成し、このオブジェクトを配列アクセスに使用します。
Settingsの自動インスタンスは、上で説明したように、引数なしで構成されています。 上記のSettings.classコードスニペットでは、この場合Pathはデフォルトの設定ファイルパス
Settings.DefaultDir &/ Application.Name & ".conf"
.
に設定されています。
結論として、クラス名 "Settings"をオブジェクトのように(動的シンボルを使用して)使用するときはいつでも、実際にはデフォルトの設定ファイルにリンクされているSettingsクラスの隠し自動インスタンスを使用します。
![]() |
この機能は、CREATE PRIVATEとともに、オブジェクト指向プログラミングの singleton patternを実装するために使用できます。 CREATE STATICを使用すると、オブジェクトのようにクラス名を使用できますが、CREATE PRIVATEを使用するとクラスが実体化されません(自動インスタンスを除く)。 CREATE STATIC + CREATE PRIVATEクラスの代わりに、Gambasの module を効果的に使用することもできます。 |
コメント
最新を表示する
NG表示方式
NGID一覧