ユーザー定義型

更新 : 2007 年 11 月

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

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

解説

複数のデータ型を結合して単一のユニットにする場合、または、どの基本データ型も要件を満たしていない場合に、構造体データ型を定義および使用します。

構造体データ型の既定値は、各メンバの既定値を組み合わせたものです。

宣言の形式

構造体宣言は、Structure ステートメント ステートメントと EndStructure ステートメントの間に記述します。Structure ステートメントで構造体の名前を指定します。この名前は、構造体によって定義されるデータ型の識別子にもなります。コードの他の部分では、この識別子を使用して、この構造体のデータ型で変数、パラメータ、関数の戻り値を宣言できます。

Structure ステートメントと EndStructure ステートメントの間の宣言によって、構造体のメンバが定義されます。

メンバのアクセス レベル

Dim ステートメント (Visual Basic) または、Public (Visual Basic)Friend (Visual Basic)Private (Visual Basic) などのアクセス レベルを指定するステートメントを使用して、すべてのメンバを宣言する必要があります。Dim ステートメントを使用すると、アクセス レベルは既定の public になります。

プログラミングのヒント

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

参照

概念

データ型の有効な使用方法

参照

データ型の概要 (Visual Basic)

ValueType

データ型変換関数

変換の概要

Structure ステートメント

Widening

Narrowing

StructLayoutAttribute

その他の技術情報

構造体 : 独自のデータ型