Object Data Type

オブジェクトを参照するアドレスを保持します。 任意の参照型 (文字列、配列、クラス、またはインターフェイス) を Object 変数に割り当てることができます。 Object 変数は、任意の値の型 (数値、BooleanCharDate、構造体、または列挙型) のデータを参照することもできます。

Remarks

Object データ型は、アプリケーションで認識されるオブジェクト インスタンスなどの任意のデータ型のデータを指すことができます。 コンパイル時に変数が指す可能性のあるデータ型がわからない場合は、Object を使用します。

Object の既定値は Nothing (null 参照) です。

データの種類

任意のデータ型の変数、定数、または式を Object 変数に割り当てることができます。 Object 変数で現在参照されているデータ型を特定するには、System.Type クラスの GetTypeCode メソッドを使用できます。 次に例を示します。

Dim myObject As Object
' Suppose myObject has now had something assigned to it.
Dim datTyp As Integer
datTyp = Type.GetTypeCode(myObject.GetType())

Object データ型は参照型です。 ただし、Visual Basic では、値の型のデータを参照するときに、Object 変数が値型として扱われます。

記憶域

参照先のデータ型にかかわらず、Object 変数にはデータ値自体は含まれませんが、値へのポインターが含まれます。 コンピューターのメモリでは常に 4 バイトが使用されますが、変数の値を表すデータの記憶域は含まれません。 コードではポインターを使用してデータが検索されるため、値の型を保持する Object 変数は、明示的に型指定された変数よりもアクセスが多少遅くなります。

プログラミングのヒント

  • 相互運用の考慮事項。 オートメーション オブジェクトや COM オブジェクトのように、.NET Framework 向けに作成されていないコンポーネントとやり取りする場合、他の環境のポインター型は Visual Basic の Object 型と互換性がないことに注意してください。

  • パフォーマンス。 Object 型で宣言する変数は、任意のオブジェクトへの参照を格納するのに十分な柔軟性があります。 ただし、このような変数に対してメソッドまたはプロパティを呼び出すと、常に遅延バインディングが発生します (実行時)。 (コンパイル時の) 事前バインディングを強制し、パフォーマンスを向上させるには、特定のクラス名を持つ変数を宣言するか、その変数を特定のデータ型にキャストします。

    オブジェクト変数を宣言するときは、一般化された Object 型ではなく、OperatingSystem などの特定のクラス型を使用してみてください。 また、Control ではなく TextBox など、使用可能な最も具体的なクラスを使用して、そのプロパティとメソッドにアクセスできるようにする必要もあります。 通常、使用可能なクラス名を見つけるには、オブジェクト ブラウザー[クラス] の一覧を使用できます。

  • 拡大変換。 すべてのデータ型とすべての参照型は、Object データ型に拡大変換されます。 これは、System.OverflowException エラーを発生させることなく、任意の型を Object に変換できることを意味します。

    ただし、値の型と Object の間で変換を行う場合、Visual Basic ではボックス化ボックス化解除という操作が実行され、これにより実行速度が低下します。

  • 型宣言文字。 Object には、リテラルの型文字も識別子の型文字も含まれません。

  • Framework のデータ型 .NET Framework において対応する型は、System.Object クラスです。

次の例は、オブジェクト インスタンスを指す Object 変数を示しています。

Dim objDb As Object
Dim myCollection As New Collection()
' Suppose myCollection has now been populated.
objDb = myCollection.Item(1)

関連項目