ユーザー定義型

定義した形式でデータを保持します。 Structure ステートメントは形式を定義します。

以前のバージョンの Visual Basic はユーザー定義型 (UDT) をサポートします。 現在のバージョンでは、UDT が構造体に拡張されています。 構造体は、さまざまなデータ型の 1 つ以上のメンバーを連結したものです。 Visual Basic は、構造体を 1 つの単位として扱いますが、そのメンバーに個別にアクセスすることもできます。

Remarks

さまざまなデータ型を 1 つの単位に結合する必要がある場合、またはニーズに応える基本データ型がない場合は、構造体のデータ型を定義して使用します。

構造体のデータ型の既定値は、各メンバーの既定値の組み合わせで構成されます。

宣言の形式

構造体宣言は、Structure ステートメントで始まり、End Structure ステートメントで終了します。 Structure ステートメントは、構造体の名前を指定します。これは、構造体で定義されるデータ型の識別子でもあります。 コードの他の部分では、この識別子を使用して、この構造体のデータ型の変数、パラメーター、および関数の戻り値を宣言できます。

Structure ステートメントと End Structure ステートメントの間の宣言では、構造体のメンバーを定義します。

メンバーのアクセス レベル

すべてのメンバーを宣言するには、Dim ステートメントを使用するか、PublicFriendPrivate などのアクセス レベルを指定するステートメントを使用する必要があります。 Dim ステートメントを使用する場合、アクセス レベルの既定値はパブリックです。

プログラミングのヒント

  • メモリの使用量。 他のすべての複合データ型と同様に、構造体の総メモリ使用量を計算する場合、各メンバーのストレージ割り当ての公称サイズを単に合計しただけでは安全ではありません。 さらに、メモリ内に格納される順序が宣言の順序と同じであると仮定するのも安全ではありません。 構造体のストレージ レイアウトを制御する必要がある場合は、StructLayoutAttribute 属性を Structure ステートメントに適用します。

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

  • 拡大変換。 任意の構造体のデータ型との間で自動変換が行われることはありません。 Operator ステートメントを使用して構造体に変換演算子を定義できます。また、各変換演算子を Widening または Narrowing として宣言できます。

  • 型宣言文字。 構造体のデータ型には、リテラルの型文字も識別子の型文字も含まれません。

  • Framework のデータ型 .NET Framework に対応する型はありません。 すべての構造体は .NET Framework クラス System.ValueType から継承されますが、System.ValueType に対応する個別の構造体はありません。

次のパラダイムは、構造体の宣言のアウトラインを示します。

[Public | Protected | Friend | Protected Friend | Private] Structure structname
    {Dim | Public | Friend | Private} member1 As datatype1
    ' ...
    {Dim | Public | Friend | Private} memberN As datatypeN
End Structure

関連項目