宣告結構的名稱,並導入結構所包含之變數、屬性、事件和程序的定義。
語法
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Partial ] _
Structure name [ ( Of typelist ) ]
[ Implements interfacenames ]
[ datamemberdeclarations ]
[ methodmemberdeclarations ]
End Structure
組件
| 術語 | 定義 |
|---|---|
attributelist |
選擇性。 請參閱 屬性清單。 |
accessmodifier |
選擇性。 可以是下列其中一項: - 公共 - 保護 - 朋友 - 私人 - 受保護的Friend - 私人受保護 請參閱 Visual Basic 中的存取層級。 |
Shadows |
選擇性。 請參閱 陰影。 |
Partial |
選擇性。 表示結構的部分定義。 請參閱 部分。 |
name |
必須的。 這個結構的名稱。 請參閱 宣告的項目名稱。 |
Of |
選擇性。 指定這是泛型結構。 |
typelist |
如果您使用 Of 關鍵詞,則為必要項。 這個結構的型別參數清單。 請參閱 類型清單。 |
Implements |
選擇性。 表示這個結構會實作一或多個介面的成員。 請參閱 Implements 語句。 |
interfacenames |
如果您使用語句, Implements 則為必要項。 這個結構所實作的介面名稱。 |
datamemberdeclarations |
必須的。 零或多個 Const、 Dim、 Enum或 Event 語句,宣告結構 的數據成員 。 |
methodmemberdeclarations |
選擇性。 、Operator、 Property或 Sub 程式的零或多個宣告Function,做為 結構的方法成員。 |
End Structure |
必須的。
Structure終止定義。 |
備註
Structure語句會定義您可以自定義的複合實值型別。
結構是舊版 Visual Basic 使用者定義型別 (UDT) 的一般化。 如需詳細資訊,請參閱 結構。
結構支援許多與類別相同的功能。 例如,結構可以有屬性和程式,它們可以實作介面,而且可以有參數化的建構函式。 不過,在繼承、宣告和使用等領域,結構和類別之間有顯著的差異。 此外,類別是參考型別,結構是實值型別。 如需詳細資訊,請參閱 結構和類別。
您只能在命名空間或模組層級使用 Structure 。 這表示結構的 宣告內容 必須是來源檔案、命名空間、類別、結構、模組或介面,而且不能是程式或區塊。 如需詳細資訊,請參閱 宣告內容和預設存取層級。
結構預設為 Friend 存取。 您可以使用存取修飾詞來調整其存取層級。 如需詳細資訊,請參閱 Visual Basic中的存取層級。
規則
嵌套。 您可以在另一個結構中定義一個結構。 外部結構稱為 包含結構,而內部結構稱為 巢狀結構。 不過,您無法透過包含結構存取巢狀結構的成員。 相反地,您必須宣告巢狀結構數據類型的變數。
成員宣告。 您必須宣告 結構的每個成員。 結構成員無法 受到保護 ,或
Protected Friend因為沒有任何專案可以繼承自 結構。 不過,結構本身可以是Protected或Protected Friend。您可以在結構中宣告零個或多個非共用變數或非共用的非自定義事件。 您不只能有常數、屬性和程式,即使其中一些非共用也一樣。
初始化。 您無法初始化結構中任何非共享數據成員的值,做為其宣告的一部分。 您必須透過結構上的參數化建構函式,初始化這類數據成員,或在建立 結構的實例之後,將值指派給成員。
繼承: 結構無法繼承自 以外的 ValueType任何類型,而所有結構都繼承自該類型。 特別是,某個結構無法繼承自另一個結構。
您無法在結構定義中使用 Inherits 語句 ,甚至不能指定 ValueType。
實作。 如果結構使用 Implements 語句,則必須實作您在 中指定的
interfacenames每個介面所定義的每個成員。Default 屬性。 結構最多可以使用Default修飾詞指定一個屬性做為其預設屬性。 如需詳細資訊,請參閱 預設值。
行為
存取層級。 在結構中,您可以使用自己的存取層級來宣告每個成員。 所有結構成員預設為 [公用 存取]。 請注意,如果結構本身具有較受限制的存取層級,這會自動限制其成員的存取,即使您使用存取修飾詞調整其存取層級也一樣。
範圍。 結構在其包含命名空間、類別、結構或模組的範圍內。
每個結構成員的範圍都是整個結構。
一生 結構本身沒有存留期。 相反地,該結構的每個實例都有與所有其他實例無關的存留期。
實例的存留期會在 New Operator 子句建立時開始。 它會在保留變數的存留期結束時結束。
您無法延長結構實例的存留期。 模組會提供靜態結構功能的近似值。 如需詳細資訊,請參閱 Module語句。
結構成員的存留期取決於其宣告方式和位置。 如需詳細資訊,請參閱 Class 語句中的「存留期」。
資格。 結構外部的程式代碼必須以該結構的名稱來限定成員的名稱。
如果巢狀結構內的程式代碼對程式設計專案進行不合格的參考,Visual Basic 會先在巢狀結構中搜尋元素,然後在其包含結構中,依序搜尋至最外層的包含專案。 如需詳細資訊,請參閱 宣告項目的參考。
記憶體耗用量。 如同所有複合數據類型,您無法藉由將其成員的名義記憶體配置加在一起,安全地計算結構的總記憶體耗用量。 此外,您無法安全地假設記憶體中的記憶體順序與您的宣告順序相同。 如果您需要控制結構的儲存配置,您可以將 屬性套用 StructLayoutAttribute 至
Structure語句。
範例
下列範例會 Structure 使用語句來定義一組員工的相關數據。 它會顯示、 和 Private 成員的使用FriendPublic,以反映數據項的敏感度。 它也會顯示程式、屬性和事件成員。
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
如需如何使用 Structures 的詳細資訊,請參閱 結構變數。