Visual Basicのモジュール(Module)は、歴史的に、明示的にインスタンスを作成することなく、プロジェクト全体でアクセスできる手続き、関数、変数を保存するために使用されます。クラスの導入により、これらの役割は部分的に重複していますが、重要な違いは残っています。
問題の歴史:
従来のVisual Basic(VB6)では、モジュールは一般的な関数やグローバル変数をグループ化する唯一の方法でした。VB.NETでは、モジュールは残されていますが、クラスの拡張された機能を持っています。
問題:
開発者がモジュールとクラスの違いを理解できないことがあり、ロジックの保存方法を誤って選択したり、コードが偶発的に重複したり、変数の予期しない動作を引き起こすことがあります。
解決策:
モジュールとクラスの選択は目的に依存します:
コード例:
' モジュール Module MathUtils Public Function Add(x As Integer, y As Integer) As Integer Return x + y End Function End Module ' 使用法 Dim result = MathUtils.Add(5, 10)
主な特徴:
Sharedで、インスタンスなしでアクセス可能ですモジュール内で変数をPublicとして宣言した場合、それはアプリケーションのすべてのフォーム/クラスに共通ですか?
はい。モジュール内のPublic変数は本質的にグローバルなものです。プロジェクトの任意のコードからアクセスでき、便利ですが、マルチスレッドの際にエラーや値の偶発的な上書きを引き起こす可能性があります。
Newを使ってモジュールのインスタンスを作成できますか?
いいえ。モジュールはインスタンス化されません。その機能はすべて静的に利用可能です。
モジュールを継承したり、ProtectedまたはPrivateのアクセス修飾子を持つモジュールを宣言できますか?
いいえ。モジュールは継承できず、名前空間レベルでのみ宣言され、入れ子にしたり、PublicまたはFriend以外の他のアクセス修飾子を持つことはできません。
プロジェクト内のすべてのユーザー状態変数がモジュール内でPublicとして宣言されています。一つのフォームでの値の変更は瞬時に他のすべてのフォームでも新しい値となります。
メリット:
デメリット:
モジュールは補助的なユーティリティ(例えば、変換関数)を保存するためだけに使用され、ユーザーの状態はカプセル化されたクラスに保存されます。
メリット:
デメリット: