ステップアップ Visual Basic 「モジュールの活用」
モジュールの定義
Public Module MyUtil ' メンバ変数 Public PI As Double = 3.14R Public Function GetBigger( ByVal x As Integer, _ ByVal y As Integer) As Integer If x >= y Then Return x Else Return y End Function End Module
モジュールの使用方法
Private Sub TestProc01() Dim util As New MyUtil() ' 不可! Dim a = util.PI ' 不可! Dim b = util.GetBigger(10, 20) ' 不可! Dim c = MyUtil.PI ' 共有変数としての使用 Dim d = MyUtil.GetBigger(10, 20) ' 共有メソッドとしての使用 Dim e = PI ' グローバル変数としての使用 Dim f = GetBigger(10, 20) ' グローバル関数としての使用 End Sub
「モジュール」の構成メンバは、下記の2点においてクラスや構造体のそれとは使用方法が異なります。
- 常に暗黙的に共有メンバである(暗黙的にShared修飾しが付いていると見なせる)
「モジュール」では、すべての構成メンバが暗黙的に共有メンバなので、インスタンスを作る必要はなく、文法上もインスタンスを作成することが禁止されています。
このような、共有メンバを使用するケースは、特定のインスタンスに関係しないデータの場合や、特定のインスタンスに関係しない操作を行う場合に適しています。
このように、特定のインスタンスにひも付かないメンバが共有メンバであり、一般にこのようなメンバを集めたオブジェクト(クラス)を「ユーティリティクラス」と言います。
- グローバル変数やグローバル関数のように使用できる
グローバル変数/関数は、特定のオブジェクトに属さない変数や関数のことです。表記上は、「オブジェクト名.〜」のように所属するオブジェクトを記述せず、単体の変数名や関数名として表記できます。
※グローバル変数/関数の使い方は、VB独自の使い方なので注意
他の型との構文や機能での違い
機能 | モジュール | クラス | 構造体 |
インスタンスの作成 | × | ○ | ○ |
継承 | × | ○ | × |
インターフェイスの実装 | × | ○ | ○ |
共有メンバの定義 | ○ | ○ | ○ |
インスタンスメンバの定義 | × | ○ | ○ |
一般的な使い分けとしては、本格的なオブジェクトであればクラスを使用し、比較的軽量なオブジェクトでは構造体を使用する。そして、ユーティリティクラスであれば、モジュールを使用することになります。