屬性程序 (Visual Basic)
屬性程序是一系列 Visual Basic 陳述式,可操作模組、類別或結構上的自訂屬性。 屬性程序也稱為「屬性存取子」。
Visual Basic 提供下列屬性程序:
Get
程序會傳回屬性值。 當您存取運算式中的屬性時,就會呼叫此程序。Set
程序會將屬性設定為值,包括物件參考。 當您將值指派給屬性時,就會呼叫此程序。
您通常會使用 Get
和 Set
陳述式來成對定義屬性程序,但如果屬性為唯讀 (Get 陳述式) 或唯寫 (Set 陳述式),則可以單獨定義任一程序。
使用自動實作的屬性時,您可以省略 Get
和 Set
程式。 如需詳細資訊,請參閱 自動實作的屬性。
您可以在類別、結構和模組中定義屬性。 屬性預設為 Public
,這表示您可以從能存取屬性容器之應用程式中的任何位置呼叫屬性。
如需屬性和變數的比較,請參閱 Visual Basic 中屬性和變數的差異。
宣告語法
屬性本身是由包含在 Property 陳述式與 End Property
陳述式之間的程式碼區塊所定義。 在這個區塊內,每個屬性程序都會顯示為包含在一個宣告陳述式 (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
可以指定有關多載、覆寫、共用和遮蔽的存取層級和資訊,以及屬性是唯讀還是唯寫。 Get
或 Set
上的 AccessLevel
可以是比指定給屬性本身的存取層級更嚴格的任何層級。 如需詳細資訊,請參閱 Property 陳述式。
資料類型
屬性的資料類型和主體存取層級是在 Property
陳述式中定義,而不是在屬性程序中定義。 一個屬性只能有一個資料類型。 例如,您無法定義屬性儲存值 Decimal
但擷取 Double
值。
存取層級
不過,您可以定義屬性的主體存取層級,並在其中一個屬性程序中進一步限制存取層級。 例如,您可以定義 Public
屬性,然後定義 Private Set
程序。 Get
程序會保持 Public
。 您只能在其中一個屬性程序中變更存取層級,且只能使其比主體存取層級更嚴格。 如需詳細資訊,請參閱操作說明:宣告混合存取層級的屬性。
參數宣告
宣告每個參數的方式與宣告 Sub 程序相同,不同之處在於傳遞機制必須是 ByVal
。
參數清單中的每個參數語法如下:
[Optional] ByVal [ParamArray] parametername As datatype
如果參數為選擇性,您也必須在其宣告中提供預設值。 指定預設值的語法如下:
Optional ByVal parametername As datatype = defaultvalue
屬性值
在 Get
程序中,會將傳回值當作屬性值提供給呼叫運算式。
在 Set
程序中,會將新屬性值傳遞至 Set
陳述式的參數。 如果您明確宣告參數,則必須使用與屬性相同的資料類型來宣告參數。 如果您未宣告參數,則編譯器會使用隱含參數 Value
來表示要指派給屬性的新值。
呼叫語法
您可以透過參考屬性來隱含叫用屬性程序。 使用屬性名稱與使用變數名稱的方式相同,不同之處在於必須為所有非選擇性引數提供值,且必須以括弧括住引數清單。 如果未提供任何引數,您可以選擇性地省略括弧。
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)