屬性程序 (Visual Basic)
Property 程序是一系列的 Visual Basic 陳述式,可對模組、類別或結構操作自訂屬性。 Property 程序也稱為「屬性存取子」(Property Accessor)。
Visual Basic 提供下列 Property 程序:
Get 程序會傳回屬性的值。 當您存取運算式中的屬性時,會呼叫它。
Set 程序會設定屬性的值 (包括物件參考)。 當您將值指派給屬性時,會呼叫它。
通常是使用 Get 和 Set 陳述式成對地定義 Property 程序,但如果屬性是唯讀 (Get 陳述式) 或唯寫 (Set 陳述式 (Visual Basic)),則可以只定義其中一個程序。
使用自動實作屬性時,可以省略 Get 和 Set 程序。 如需詳細資訊,請參閱自動實作的屬性 (Visual Basic)。
您可以在類別、結構和模組中定義屬性。 屬性預設值為 Public,這表示可從應用程式中任何可存取屬性容器 (Container) 的位置呼叫它們。
如需屬性和變數的比較,請參閱 Visual Basic 中屬性和變數的差別。
宣告語法
屬性本身是由 Property 陳述式和 End Property 陳述式內封入的程式碼區塊所定義。 在這個區塊中,每一個 Property 程序會顯示為封入宣告陳述式 (Declaration Statement) (Get 或 Set) 和相對應 End 宣告中的內部區塊。
宣告屬性和其程序的語法如下:
[Default] [Modifiers] Property PropertyName[(ParameterList)] [As DataType]
[AccessLevel] Get
' Statements of the Get procedure.
' The following statement returns an expression as the property's value.
Return Expression
End Get
[AccessLevel] Set[(ByVal NewValue As DataType)]
' Statements of the Set procedure.
' The following statement assigns newvalue as the property's value.
LValue = NewValue
End Set
End Property
- or -
[Default] [Modifiers] Property PropertyName [(ParameterList)] [As DataType]
Modifiers 可指定多載化 (Overloading)、覆寫、共用和遮蔽的存取層級和相關資訊,以及屬性為唯讀或唯寫。 在 Get 或 Set 中的 AccessLevel 可以是要為屬性指定的存取層級更嚴格的所有層級。 如需詳細資訊,請參閱Property 陳述式。
資料型別
屬性資料型別和主要存取層級是定義在 Property 陳述式中,而不是 Property 程序中。 屬性只可以有一個資料型別。 例如,不可將屬性定義成儲存 Decimal 值,但卻擷取 Double 值。
存取層級
不過,您可定義屬性的主要存取層級,進一步限制在它的其中一個 Property 程序中的存取層級。 例如,可定義 Public 屬性,然後定義 Private Set 程序。 Get 程序仍保持為 Public。 只可變更其中一個屬性程序的存取層級,且只可讓它變得比主要存取層級更多約束。 如需詳細資訊,請參閱如何:宣告混合存取層級的屬性 (Visual Basic)。
參數宣告
使用與宣告 Sub 程序 (Visual Basic)的相同方式來宣告每個參數,但傳遞機制必須是 ByVal。
參數清單中每一個參數的語法如下:
[Optional] ByVal [ParamArray] parametername As datatype
如果為選擇性參數,您還必須提供預設值做為其宣告的一部分。 用於指定預設值的語法如下:
Optional ByVal parametername As datatype = defaultvalue
屬性值
在 Get 程序中,傳回值會做為屬性值提供給呼叫運算式。
在 Set 程序中,新的屬性值會傳遞到 Set 陳述式的參數。 如果您明確地宣告參數,則必須使用與屬性相同的資料型別來進行宣告。 如果您未宣告參數,編譯器會用隱含參數 Value 代表指派給該屬性的新值。
呼叫語法
藉由參考該屬性,隱含地叫用 (Invoke) 屬性程序。 您使用屬性名稱的方式與您使用變數名稱的方式相同,除了您必須為所有非選擇性的引數提供值外,還必須將引數清單封入括弧中。 如果未提供引數,您也可以省略括號。
Set 程序的隱含呼叫語法如下:
propertyname[(argumentlist)] = expression
Get 程序的隱含呼叫語法如下:
lvalue = propertyname[(argumentlist)]
Do While (propertyname[(argumentlist)] > expression)
宣告和呼叫的說明
下列屬性會將完整名稱儲存成兩個構成名稱:名字和姓氏。 在呼叫程式碼讀取 fullName 時,Get 程序會結合這兩個構成名稱,並傳回完整名稱。 在呼叫程式碼指派新的完整名稱時,Set 程序會嘗試將新名稱分割成兩個構成名稱。 如果找不到空格,則會將它整個儲存成名字。
Dim firstName, lastName As String
Property fullName() As String
Get
If lastName = "" Then
Return firstName
Else
Return firstName & " " & lastName
End If
End Get
Set(ByVal Value As String)
Dim space As Integer = Value.IndexOf(" ")
If space < 0 Then
firstName = Value
lastName = ""
Else
firstName = Value.Substring(0, space)
lastName = Value.Substring(space + 1)
End If
End Set
End Property
下列範例會示範 fullName 之屬性程序的典型呼叫。
fullName = "MyFirstName MyLastName"
MsgBox(fullName)