Xojo日本語ブログ

マルチプラットフォーム対応アプリが開発できるXojoのブログです。

Xojoでの共有メソッド、クラスメソッドの使い方

JavaRubyPythonなどで言うところのスタティックメソッド、クラスメソッドと呼ばれる機能はXojoでは共有メソッドと呼ばれます。共有メソッドを定義することで、クラスをインスタンス化しなくともメソッドが呼び出せるようになります。

共有メソッドと通常のクラスメソッドの違いは次の通りです。

  • 共有メソッドはクラスのインスタンス化せずに呼び出せる
  • 共有メソッドからはクラスのプロパティへアクセス不可

もしプロパティ的なものが必要な場合は、共有プロパティを使います。

共有プロパティの注意

共有プロパティはRubyでいうところのクラス変数に相当します。継承したクラスも含めて、インスタンス化されたクラスも影響を受ける変数になります。

もし ClassSample.shared_method があり、

System.DebugLog(shared_property)

といった形で共有プロパティを出力するだけだとします。デフォルト値は foo だとすると、

ClassSample.shared_method
-> foo
SubclassSample.shared_method
-> foo

// ここで書き換え
ClassSample.shared_property = "new"

SubclassSample.shared_method
-> new

といった形で継承したSubclassSampleも影響を受けます。これはインスタンス化されたクラスも同じで、

Dim c1 as new ClassSample
Dim c2 as new ClassSample

c1.shared_method
-> new

// ここで書き換え
c1.shared_property = "old"

SubclassSample.shared_method
-> old

c2.shared_method
-> old

となります。なお、継承したクラスの方で共有プロパティが定義されていたとしても、親クラスの共有プロパティが優先されます。影響範囲を考えると、共有プロパティは上書きしない方が良さそうです。またはデータベース接続などを共通の親クラスに持たせておくことで、全体で同じ接続を使えるようになるでしょう。

クラスをインスタンス化せずに使いたいメソッドは多いと思いますので、その際には共有メソッドとして定義しましょう。