クラス (Visual Basic 6.0 ユーザー向け)
更新 : 2007 年 11 月
クラスは、オブジェクト指向アプリケーションを作るビルド ブロックです。クラスは、システムにおいてオブジェクトを表すプログラミング構造です。アプリケーションを設計するには、アプリケーションを構成するオブジェクト、オブジェクトに格納する情報、およびオブジェクトで実行できる処理を設計することが必要です。クラスとオブジェクト指向プログラミングの詳細については、「Visual Basic におけるオブジェクト指向プログラミング」を参照してください。
クラス モジュール
Visual Basic 6.0
Visual Basic 6.0 では、クラス モジュールを使ってクラスを定義できます。クラスの定義は、.cls ファイルという特別な種類のファイルに保存されます。クラス モジュールごとに 1 つのクラスを定義します。クラス定義の一部は、.cls ファイルに埋め込まれ、プロジェクト システムを使用する方法でしか編集できません。
Visual Basic 2008
Visual Basic 2008 では、クラスはファイル名ではなく Class ステートメント (Visual Basic) で定義します。Visual Basic 2008 のクラスは、.vb ファイルというソース コード ファイルで定義します。複数のクラスを 1 つのファイルに定義できます。すべてのクラス定義は、ソース コード内にプレーンテキストとして現れます。
グローバル クラス
Visual Basic 6.0
Visual Basic 6.0 で新しいクラスを作成するときに、Instancing プロパティに設定可能な値には GlobalSingleUse および GlobalMultiUse が含まれます。これらの値は、他のコンポーネントが、新しいクラスのプロパティやメソッドを共有メンバであるかのように呼び出すことができることを示します。クラスのインスタンスは、メンバが最初に呼び出されるときに暗黙的に作成されます。
Visual Basic 2008
Visual Basic 2008 では、Instancing プロパティはサポートされていません。それと同じ機能を提供するために、Visual Basic 2008 では標準モジュール メンバを公開できるようになっています。クラスの共有プロパティおよび共有メソッドにアクセスするには、Imports ステートメントを使用します。GlobalMultiUse の機能は、Public クラス アクセスと適切なコンストラクタ アクセスで実行できます。
データ クラス
Visual Basic 6.0
Visual Basic 6.0 では、Data Source クラスと Complex Data Consumer クラスもサポートされています。
Visual Basic 2008
Visual Basic 2008 には、これらに直接対応する項目はありません。データを操作するクラスの詳細については、「方法 : オブジェクトのデータに接続する」を参照してください。
既定のメンバ
Visual Basic 6.0
Visual Basic 6.0 では、特定のメソッドまたはデータ メンバをクラスの既定のメンバに指定できます。
Visual Basic 2008
Visual Basic 2008 では、クラスまたは構造体の既定のメンバは、引数を受け取るプロパティだけです。これにより、他のプログラミング言語との相互運用性が実現されます。詳細については、「方法 : 既定のプロパティを宣言する/呼び出す (Visual Basic)」を参照してください。
オブジェクトの有効期間
Visual Basic 6.0
オブジェクトの有効期間は、オブジェクト インスタンスの作成および終了によって決定されます。オブジェクトの作成時間は宣言元のプログラムによって決定されますが、終了についてはより複雑な機構がかかわってきます。
Visual Basic 6.0 では、すべてのオブジェクト インスタンスが参照カウントを保持します。インスタンスへの最後の参照が解放されると、カウントが 0 になり、オブジェクトはすぐに終了します。
Visual Basic 2008
Visual Basic 2008 では、最後の参照が解放された直後にデストラクタが呼び出されるとは限りません。これは、個別の参照カウントの代わりに、共通言語ランタイムが参照ツリーを保持しているためです。ガベージ コレクタは、バックグラウンドで参照ツリーをトレースします。現在実行されているコードから参照されていないオブジェクトまたはオブジェクトのグループが見つかると、これらのオブジェクトのデストラクタが呼び出されます。破棄の順序や、ガベージ コレクタが参照ツリーをトレースするのにかかる時間を予測することは不可能です。したがって、オブジェクトの有効期間は不確定になります。詳細については、「オブジェクトの有効期間 : オブジェクトの作成と破棄」および「ガベージ コレクション」を参照してください。
アップグレード オプション
アップグレード ウィザードは、最小限のコードを変更して単純なクラス モジュールを作成します。上に示した変更点のほかにも、Visual Basic のプログラマには、特にオブジェクト指向プログラミングに関連した複数の新しい構造が用意されています。その一部を以下に示します。
コンストラクタ コンストラクタは、Visual Basic 6.0 の Class_Initialize に代えて使用できます。詳細については、「Class_Initialize の変更点 (Visual Basic 6.0 ユーザー向け)」を参照してください。
既定のインデックス付きのプロパティ 既定のインデックス付きのプロパティは、コレクションのアイテムにアクセスする場合に .NET Framework で多用されます。詳細については、「既定のプロパティの変更点 (Visual Basic 6.0 ユーザー向け)」を参照してください。
読み取り専用 Visual Basic 6.0 では、Get プロシージャがないプロパティは、暗黙的に読み取り専用になります。Visual Basic 2008 では、ReadOnly キーワードを使って、読み取り専用であることを明示的に宣言する必要があります。詳細については、「Property ステートメント」を参照してください。
遅延バインディング Visual Basic 6.0 は、既定で遅延バインディングを備えています。Option Strict を Off に設定すると、コードのアップグレード時にエラーが発生しない可能性が高くなります。Option Strict を On に変更すると、タイプ セーフなコンパイルが実行され、実行時ではなくコンパイル時に微妙なエラーが顕在化することがあります。詳細については、「Option Strict ステートメント」を参照してください。
メソッドのオーバーロード メソッドのオーバーロードを使うと、名前付きのクラス メンバの数が減ります。それにより、クラスは読みやすくなり、再プログラミングが簡単になります。詳細については、「プロシージャの変更点 (Visual Basic 6.0 ユーザー向け)」を参照してください。
ファイル名 Visual Basic 6.0 では、クラス名とファイル名が一致する必要があります。Visual Basic 2008 では、両方の名前をプログラマが自由に決めることや、複数のクラスを同じソース ファイルに定義することができます。1 つのファイルにいくつのクラスを定義するかは、通常はコーディング標準で定めます。
ByRef Visual Basic 6.0 では、パラメータの既定は ByRef なので、アップグレード時にも ByRef を使うのが安全です。詳細については、「ByVal」を参照してください。
Return キーワード Visual Basic 6.0 では、関数名が、関数の値を返すための変数として使用されます。Visual Basic 2008 では、関数の値を返すための明示的な Return キーワードが用意されています。詳細については、「Return ステートメント (Visual Basic)」を参照してください。
演算子のオーバーロード 独自に定義したクラスのために、加算 (+)、減算 (-)、およびその他の演算子の意味を定義できます。詳細については、「Operator ステートメント」を参照してください。
新しい演算子 += 演算子を使用して、コード行を短く簡略化して書くことができます。詳細については、「算術演算子 (Visual Basic)」を参照してください。
新しい値のインライン定義 Visual Basic 2008 の構文では、新しい変数の値の宣言と設定を 1 行のコードで記述できます。したがって、オブジェクトをインスタンス化する時点でデータの制約を強制できます。詳細については、「Dim ステートメント (Visual Basic)」を参照してください。
危険を冒さずにコードを書き直すことはできません。コードを変更した場合は、その部分をテストする必要があります。また、Visual Basic 2008 では、一部のキーワードは Visual Basic 6.0 で使用した場合とまったく同じ動作はしません。詳細については、「以前のバージョンの Visual Basic で作成されたアプリケーションのアップグレード」を参照してください。
参照
概念
Class_Initialize の変更点 (Visual Basic 6.0 ユーザー向け)
参照
'ByVal' および 'ByRef' を組み合わせて使用することはできません。