次の方法で共有


Structure ステートメント

構造体の名前を宣言し、構造体が構成する変数、プロパティ、イベント、およびプロシージャの定義を導入します。

構文

[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Partial ] _
Structure name [ ( Of typelist ) ]
    [ Implements interfacenames ]
    [ datamemberdeclarations ]
    [ methodmemberdeclarations ]
End Structure

部品

任期 定義
attributelist 任意。 属性リストを参照してください
accessmodifier 任意。 次のいずれかを指定できます。

- 公共
- 保護
- 友人
- プライベート
- 保護されたフレンド
- Private Protected

Visual Basic のアクセス レベルを参照してください。
Shadows 任意。 「 影」を参照してください。
Partial 任意。 構造体の部分的な定義を示します。 部分を参照してください。
name 必須。 この構造体の名前。 「宣言された要素名」を参照してください。
Of 任意。 これがジェネリック構造体であることを指定します。
typelist Of キーワードを使用する場合は必須です。 この構造体の型パラメーターの一覧。 型リストを参照してください。
Implements 任意。 この構造体が 1 つ以上のインターフェイスのメンバーを実装することを示します。 「 Implements ステートメント」を参照してください。
interfacenames Implements ステートメントを使用する場合は必須です。 この構造体が実装するインターフェイスの名前。
datamemberdeclarations 必須。 構造体のデータ メンバーを宣言する 0 個以上のConstDimEnum、またはEventステートメント。
methodmemberdeclarations 任意。 構造体のメソッド メンバーとして機能する、FunctionOperatorProperty、またはSubプロシージャの 0 個以上の宣言。
End Structure 必須。 Structure定義を終了します。

注釈

Structure ステートメントは、カスタマイズできる複合値型を定義します。 構造体は、以前のバージョンの Visual Basic のユーザー定義型 (UDT) の一般化です。 詳細については、「 構造」を参照してください。

構造体は、クラスと同じ機能の多くをサポートします。 たとえば、構造体はプロパティとプロシージャを持ち、インターフェイスを実装でき、パラメーター化されたコンストラクターを持つことができます。 ただし、継承、宣言、使用法などの領域では、構造体とクラスの間に大きな違いがあります。 また、クラスは参照型であり、構造体は値型です。 詳細については、「 構造体とクラス」を参照してください。

Structureは、名前空間またはモジュール レベルでのみ使用できます。 つまり、構造体の 宣言コンテキスト はソース ファイル、名前空間、クラス、構造体、モジュール、またはインターフェイスである必要があり、プロシージャまたはブロックにすることはできません。 詳細については、「 宣言コンテキストと既定のアクセス レベル」を参照してください。

構造体の既定値は Friend アクセスです。 アクセス修飾子を使用してアクセス レベルを調整できます。 詳細については、「 Visual Basic のアクセス レベル」を参照してください。

準則

  • ネスティング。 1 つの構造体を別の構造体内で定義できます。 外側の構造体は 包含構造と呼ばれ、内部構造は 入れ子構造と呼ばれます。 ただし、入れ子になった構造体のメンバーには、含まれている構造体を介してアクセスすることはできません。 代わりに、入れ子になった構造体のデータ型の変数を宣言する必要があります。

  • メンバー宣言。 構造体のすべてのメンバーを宣言する必要があります。 構造体から何も継承できないため、構造体メンバーを 保護 または Protected Friend することはできません。 ただし、構造体自体は、 Protected または Protected Friendできます。

    構造体では、0 個以上の非共有変数または非共有の非カスタム イベントを宣言できます。 定数、プロパティ、プロシージャは、一部が非共有であっても持つことはできません。

  • 初期化。 構造体の非共有データ メンバーの値を宣言の一部として初期化することはできません。 構造体のパラメーター化されたコンストラクターを使用してこのようなデータ メンバーを初期化するか、構造体のインスタンスを作成した後でメンバーに値を割り当てる必要があります。

  • 継承。 構造体は、すべての構造体が継承する ValueType以外の型から継承することはできません。 特に、ある構造体を別の構造体から継承することはできません。

    ValueTypeを指定する場合でも、構造体定義で Inherits ステートメントを使用することはできません。

  • 実装。 構造体で Implements ステートメントを使用する場合は、 interfacenamesで指定するすべてのインターフェイスで定義されているすべてのメンバーを実装する必要があります。

  • 既定のプロパティ。 構造体では、Default 修飾子を使用して、既定のプロパティとして最大 1 つのプロパティを指定できます。 詳細については、「 既定値」を参照してください。

行動

  • アクセス レベル。 構造体内では、各メンバーを独自のアクセス レベルで宣言できます。 すべての構造体メンバーは、既定で パブリック アクセスに設定されます。 構造体自体のアクセス レベルが制限されている場合、アクセス修飾子を使用してアクセス レベルを調整した場合でも、メンバーへのアクセスが自動的に制限されることに注意してください。

  • 範囲。 構造体は、含まれる名前空間、クラス、構造体、またはモジュール全体のスコープ内にあります。

    すべての構造体メンバーのスコープは、構造体全体です。

  • 一生。 構造体自体に有効期間はありません。 代わりに、その構造体の各インスタンスには、他のすべてのインスタンスに依存しない有効期間があります。

    インスタンスの有効期間は、 New Operator 句によってインスタンスが作成されるときに開始されます。 保持する変数の有効期間が終了すると終了します。

    構造体インスタンスの有効期間を延長することはできません。 静的構造の機能に対する近似は、モジュールによって提供されます。 詳細については、「 Module ステートメント」を参照してください。

    構造体メンバーは、宣言の方法と場所に応じて有効期間を持ちます。 詳細については、 Class ステートメントの「有効期間」を参照してください。

  • 資格。 構造体外のコードでは、メンバーの名前をその構造体の名前で修飾する必要があります。

    入れ子になった構造体内のコードがプログラミング要素への非修飾参照を行う場合、Visual Basic は、最初に入れ子になった構造体で要素を検索し、次に、その包含構造内で、最も外側の包含要素に対して検索します。 詳細については、「 宣言された要素への参照」を参照してください。

  • メモリ消費量。 すべての複合データ型と同様に、構造体のメンバーのわずかなストレージ割り当てを加算して、構造体の合計メモリ消費量を安全に計算することはできません。 さらに、メモリ内のストレージの順序が宣言の順序と同じであると安全に想定することはできません。 構造体のストレージ レイアウトを制御する必要がある場合は、 StructLayoutAttribute 属性を Structure ステートメントに適用できます。

次の例では、 Structure ステートメントを使用して、従業員の関連データのセットを定義します。 データ項目の機密性を反映するために、 PublicFriend、および Private メンバーの使用を示します。 プロシージャ、プロパティ、およびイベント メンバーも表示されます。

Public Structure employee
    ' Public members, accessible from throughout declaration region.
    Public firstName As String
    Public middleName As String
    Public lastName As String
    ' Friend members, accessible from anywhere within the same assembly.
    Friend employeeNumber As Integer
    Friend workPhone As Long
    ' Private members, accessible only from within the structure itself.
    Private homePhone As Long
    Private level As Integer
    Private salary As Double
    Private bonus As Double
    ' Procedure member, which can access structure's private members.
    Friend Sub CalculateBonus(ByVal rate As Single)
        bonus = salary * CDbl(rate)
    End Sub
    ' Property member to return employee's eligibility.
    Friend ReadOnly Property Eligible() As Boolean
        Get
            Return level >= 25
        End Get
    End Property
    ' Event member, raised when business phone number has changed.
    Public Event ChangedWorkPhone(ByVal newPhone As Long)
End Structure

Structureの使用方法の詳細については、「構造体変数」を参照してください。

こちらも参照ください