Structure 陳述式

宣告結構的名稱,並說明組成結構之變數、屬性、事件與程序的定義。

語法

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

組件

詞彙 定義
attributelist 選擇性。 請參閱屬性清單
accessmodifier 選擇性。 可以是下列其中一項:

- 公開
- Protected
- Friend
- 私用
- Protected Friend
- Private Protected

請參閱 Access levels in Visual Basic
Shadows 選擇性。 請參閱 Shadows
Partial 選擇性。 指定結構的部分定義。 請參閱 Partial
name 必要。 此結構的名稱。 請參閱 Declared Element Names
Of 選擇性。 指定這是否為泛型結構。
typelist 使用 Of 關鍵字時的必要項目。 此結構的型別參數清單。 請參閱類型清單
Implements 選擇性。 表示此結構會實作一或多個介面的成員。 請參閱 Implements 陳述式
interfacenames 使用 Implements 元素時的必要項目。 此結構實作的介面名稱。
datamemberdeclarations 必要。 零個或多個 ConstDimEnumEvent 陳述式,用於宣告結構的「資料成員」
methodmemberdeclarations 選擇性。 FunctionOperatorPropertySub 程序的零個或多個宣告,用作結構的「方法成員」
End Structure 必要。 終止 Structure 定義。

備註

Structure 陳述式會定義您可以自訂的複合實值型別。 「結構」是廣義的舊版 Visual Basic 使用者定義型別 (UDT)。 如需詳細資訊,請參閱結構

結構支援許多與類別相同的功能。 例如,結構可以有屬性和程序、可以實作介面,而且可以有參數化的建構函式。 不過,在繼承、宣告和使用等方面,結構與類別之間有顯著的差異。 此外,類別是參考型別,而結構是實值型別。 如需詳細資訊,請參閱結構與類別

您只能在命名空間或模組層級使用 Structure。 這表示結構的「宣告內容」必須是來源檔案、命名空間、類別、結構、模組或介面,而且不能是程序或區塊。 如需詳細資訊,請參閱宣告內容和預設存取層級

結構的存取預設為 Friend。 您可以使用存取修飾詞調整其存取層級。 如需詳細資訊,請參閱 Visual Basic 的存取層級

規則

  • 巢狀。 您可以在另一個結構內定義一個結構。 外部結構稱為「包含結構」,而內部結構稱為「巢狀結構」。 不過,您無法透過包含結構存取巢狀結構的成員, 而是必須宣告巢狀結構資料類型的變數。

  • 成員宣告。 您必須宣告結構的每個成員。 結構成員不能是 ProtectedProtected Friend,因為沒有任何項目可從結構繼承。 不過,結構本身可以是 ProtectedProtected Friend

    您可以在結構中宣告零個或多個非共用變數,或非共用、非自訂的事件。 即使部分常數、屬性和程序未共用,您也無法只擁有常數、屬性和程序。

  • 初始化。 您無法在宣告中,將結構的任何未共用資料成員值初始化。 您必須透過結構上的參數化建構函式,或在您建立結構的執行個體之後,將值指派給成員,才能將這類資料成員初始化。

  • 繼承: 結構無法繼承自 ValueType 以外的任何類型,所有結構都繼承自該類型。 尤其是,結構無法繼承其他結構。

    您無法在模組定義中使用 Inherits 陳述式,甚至是指定 ValueType

  • 實作。 若結構使用 Implements 陳述式,您就必須實作您在 interfacenames 中指定之每個介面所定義的每個成員。

  • 預設屬性。 結構可以使用 Default 修飾詞,將最多一個屬性指定為其「預設屬性」。 如需詳細資訊,請參閱 Default

行為

  • 存取層級。 在結構中,您可以使用成員自己的存取層級來宣告每個成員。 所有結構成員的存取權預設為 Public。 請注意,如果結構本身的存取層級有較多限制,這會自動限制其成員的存取,即使您使用存取修飾詞調整其存取層級也一樣。

  • [範圍]。 結構的包含命名空間、類別、結構或模組,均在範圍內。

    每個結構成員的範圍都是整個結構。

  • 存留期。 結構本身沒有存留期。 不過,該結構的每個執行個體都有不受其他執行個體影響的存留期。

    執行個體的存留期在 New Operator 子句加以建立時開始, 在予以保留的變數存留期結束時一同結束。

    您無法延長結構執行個體的存留期。 模組會提供靜態結構功能的近似項目。 如需詳細資訊,請參閱 Module 陳述式

    結構成員的存留期取決於其宣告方式和位置。 如需詳細資訊,請參閱Class 陳述式中的<存留期>。

  • 限定性條件。 結構外的程式碼必須以該結構的名稱來限定成員的名稱。

    若巢狀結構內的程式碼在參考程式設計元素時未加以限定,Visual Basic 會先搜尋巢狀結構內的元素,然後循序從其包含結構等,一路向外搜尋到最外層的包含元素。 如需詳細資訊,請參閱 References to Declared Elements

  • 記憶體使用量。 如同所有複合資料型別,您無法藉由將其成員的具名儲存體配置加在一起,安全地計算結構的總記憶體使用量。 此外,您無法安全地假設記憶體中的儲存體順序與您的宣告順序相同。 如果您需要控制結構的儲存體配置,可以將 StructLayoutAttribute 屬性套用至 Structure 陳述式。

範例

下列範例使用 Structure 陳述式來定義某位員工的一組相關資料。 其中示範了如何使用 PublicFriendPrivate 成員來反映資料項目的敏感度, 並顯示程序、屬性和事件成員。

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 的詳細資訊,請參閱結構變數

另請參閱