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 |
必要。 零個或多個 Const 、Dim 、Enum 或 Event 陳述式,用於宣告結構的「資料成員」。 |
methodmemberdeclarations |
選擇性。 Function 、Operator 、Property 或 Sub 程序的零個或多個宣告,用作結構的「方法成員」。 |
End Structure |
必要。 終止 Structure 定義。 |
備註
Structure
陳述式會定義您可以自訂的複合實值型別。 「結構」是廣義的舊版 Visual Basic 使用者定義型別 (UDT)。 如需詳細資訊,請參閱結構。
結構支援許多與類別相同的功能。 例如,結構可以有屬性和程序、可以實作介面,而且可以有參數化的建構函式。 不過,在繼承、宣告和使用等方面,結構與類別之間有顯著的差異。 此外,類別是參考型別,而結構是實值型別。 如需詳細資訊,請參閱結構與類別。
您只能在命名空間或模組層級使用 Structure
。 這表示結構的「宣告內容」必須是來源檔案、命名空間、類別、結構、模組或介面,而且不能是程序或區塊。 如需詳細資訊,請參閱宣告內容和預設存取層級。
結構的存取預設為 Friend。 您可以使用存取修飾詞調整其存取層級。 如需詳細資訊,請參閱 Visual Basic 的存取層級。
規則
巢狀。 您可以在另一個結構內定義一個結構。 外部結構稱為「包含結構」,而內部結構稱為「巢狀結構」。 不過,您無法透過包含結構存取巢狀結構的成員, 而是必須宣告巢狀結構資料類型的變數。
成員宣告。 您必須宣告結構的每個成員。 結構成員不能是 Protected 或
Protected Friend
,因為沒有任何項目可從結構繼承。 不過,結構本身可以是Protected
或Protected Friend
。您可以在結構中宣告零個或多個非共用變數,或非共用、非自訂的事件。 即使部分常數、屬性和程序未共用,您也無法只擁有常數、屬性和程序。
初始化。 您無法在宣告中,將結構的任何未共用資料成員值初始化。 您必須透過結構上的參數化建構函式,或在您建立結構的執行個體之後,將值指派給成員,才能將這類資料成員初始化。
繼承: 結構無法繼承自 ValueType 以外的任何類型,所有結構都繼承自該類型。 尤其是,結構無法繼承其他結構。
您無法在模組定義中使用 Inherits 陳述式,甚至是指定 ValueType。
實作。 若結構使用 Implements 陳述式,您就必須實作您在
interfacenames
中指定之每個介面所定義的每個成員。預設屬性。 結構可以使用 Default 修飾詞,將最多一個屬性指定為其「預設屬性」。 如需詳細資訊,請參閱 Default。
行為
存取層級。 在結構中,您可以使用成員自己的存取層級來宣告每個成員。 所有結構成員的存取權預設為 Public。 請注意,如果結構本身的存取層級有較多限制,這會自動限制其成員的存取,即使您使用存取修飾詞調整其存取層級也一樣。
[範圍]。 結構的包含命名空間、類別、結構或模組,均在範圍內。
每個結構成員的範圍都是整個結構。
存留期。 結構本身沒有存留期。 不過,該結構的每個執行個體都有不受其他執行個體影響的存留期。
執行個體的存留期在 New Operator 子句加以建立時開始, 在予以保留的變數存留期結束時一同結束。
您無法延長結構執行個體的存留期。 模組會提供靜態結構功能的近似項目。 如需詳細資訊,請參閱 Module 陳述式。
結構成員的存留期取決於其宣告方式和位置。 如需詳細資訊,請參閱Class 陳述式中的<存留期>。
限定性條件。 結構外的程式碼必須以該結構的名稱來限定成員的名稱。
若巢狀結構內的程式碼在參考程式設計元素時未加以限定,Visual Basic 會先搜尋巢狀結構內的元素,然後循序從其包含結構等,一路向外搜尋到最外層的包含元素。 如需詳細資訊,請參閱 References to Declared Elements。
記憶體使用量。 如同所有複合資料型別,您無法藉由將其成員的具名儲存體配置加在一起,安全地計算結構的總記憶體使用量。 此外,您無法安全地假設記憶體中的儲存體順序與您的宣告順序相同。 如果您需要控制結構的儲存體配置,可以將 StructLayoutAttribute 屬性套用至
Structure
陳述式。
範例
下列範例使用 Structure
陳述式來定義某位員工的一組相關資料。 其中示範了如何使用 Public
、Friend
和 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
的詳細資訊,請參閱結構變數。