宣告屬性的名稱,以及用來儲存及擷取屬性值的屬性程序。
語法
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ] [ Iterator ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]
[ <attributelist> ] [ accessmodifier ] Get
[ statements ]
End Get
[ <attributelist> ] [ accessmodifier ] Set ( ByVal value As returntype [, parameterlist ] )
[ statements ]
End Set
End Property
- or -
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]
組件
attributelist選擇性。 套用至此屬性 (Property) 或是
Get或Set程序的屬性 (Attribute) 清單。 請參閱屬性清單。Default選擇性。 指定此屬性是其定義所在類別或結構的預設屬性。 預設屬性必須接受參數,且可以進行設定和擷取,而不需要指定屬性名稱。 如果您將屬性宣告為
Default,則無法在屬性或其任一屬性程序上使用Private。 如需範例和詳細指引,請參閱 如何:在 Visual Basic 中宣告和呼叫預設屬性。accessmodifier在
Property陳述式上和最多其中一個Get和Set陳述式上是選擇性的。 可以是下列其中一項:propertymodifiers選擇性。 可以是下列其中一項:
MustOverride OverridesNotOverridable Overrides
Shared選擇性。 請參閱 Shared。
Shadows選擇性。 請參閱 Shadows。
ReadOnly選擇性。 請參閱 ReadOnly。
WriteOnly選擇性。 請參閱 WriteOnly。
Iterator選擇性。 請參閱迭代器。
name必要。 屬性的名稱。 請參閱 Declared Element Names。
parameterlist選擇性。 區域變數名稱清單,代表此屬性的參數,也可能代表
Set程序的其他參數。 參數化屬性通常用來建立索引子或預設屬性,以允許類似集合的存取。 請參閱 參數清單 和 如何:在 Visual Basic 中宣告和呼叫預設屬性。returntype如果
Option Strict為On,則為必要項。 此屬性所傳回值的資料類型。Implements選擇性。 表示此屬性會實作一或多個屬性,每個屬性都會在此屬性包含類別或結構所實作的介面中定義。 請參閱 Implements 陳述式。
implementslist如果使用
Implements,則為必要項。 所正在實作的屬性清單。implementedproperty [ , implementedproperty ... ]每個
implementedproperty都具有下列語法和組件:interface.definedname部分 描述 interface必要。 此屬性包含類別或結構所實作的介面名稱。 definedname必要。 用來在 interface中定義屬性的名稱。Get選擇性。 如果屬性標示為
ReadOnly,則為必要項。 啟動用來傳回屬性值的Get屬性程序。Get語句不會與自動實作的屬性搭配使用。statements選擇性。 要在
Get或Set程序中執行的陳述式區塊。End Get終止
Get屬性程序。Set選擇性。 如果屬性標示為
WriteOnly,則為必要項。 啟動用來儲存屬性值的Set屬性程序。Set語句不會與自動實作的屬性搭配使用。End Set終止
Set屬性程序。End Property終止此屬性的定義。
備註
Property 陳述式引進屬性的宣告。 屬性可以有 Get 程序 (唯讀)、Set 程序 (唯寫),或兩者皆有 (讀寫)。 使用自動實作的屬性時,您可以省略 Get 和 Set 程式。 如需詳細資訊,請參閱 自動實作的屬性。
您只能在類別層級使用 Property。 這表示屬性的「宣告內容」必須是類別、結構、模組或介面,且不能是原始程式檔、命名空間、程序或區塊。 如需詳細資訊,請參閱宣告內容和預設存取層級。
根據預設,屬性會使用公用存取。 您可以在 Property 陳述式上使用存取修飾詞來調整屬性的存取層級,也可以選擇性地將其中一個屬性程序調整為更嚴格的存取層級。 如需混合存取層級的詳細範例,請參閱 如何:宣告具有混合存取層級的屬性。
Visual Basic 會在屬性指派期間將參數傳遞至 Set 程序。 如果您未提供 Set 的參數,則整合式開發環境 (IDE) 會使用名為 value 的隱含參數。 此參數會保留要指派給屬性的值。 您通常會將此值儲存在私用區域變數中,並在每次呼叫 Get 程序時傳回。
規則
混合的存取層級。 如果您要定義讀寫屬性,您可以選擇性地為
Get或Set程序指定不同的存取層級,但不能同時指定兩者。 如果您這樣做,程序存取層級必須比屬性的存取層級更嚴格。 例如,如果屬性已宣告為Friend,您可以將Set程序宣告為Private,但不能宣告為Public。如果您要定義
ReadOnly或WriteOnly屬性,則單一屬性程序 (分別為Get或Set) 會代表所有屬性。 您無法為這類程序宣告不同的存取層級,因為這會為屬性設定兩個存取層級。傳回型別。
Property陳述式可以宣告傳回值的資料類型。 您可以指定任何資料類型,或是列舉、結構、類別或介面的名稱。如果您未指定
returntype,則屬性會傳回Object。實作。 如果此屬性使用
Implements關鍵字,則包含類別或結構必須在其Implements或Class陳述式後面緊接著Structure陳述式。Implements陳述式必須包含implementslist中指定的每個介面。 不過,介面用來定義Property的名稱 (在definedname中) 無需與此屬性的名稱 (在name中) 相同。
行為
從屬性程序返回。 當
Get或Set程序返回呼叫程式碼時,會繼續執行接在叫用陳述式後面的陳述式。Exit Property和Return陳述式會導致屬性程序立即結束。 任意數目的Exit Property和Return陳述式可以出現在程序中的任何位置,且您可以混合Exit Property與Return陳述式。傳回值。 若要從
Get程序傳回值,您可以將值指派給屬性名稱,或將其包含在Return陳述式中。 下列範例會將傳回值指派給屬性名稱quoteForTheDay,然後使用Exit Property陳述式傳回。Private quoteValue As String = "No quote assigned yet."ReadOnly Property QuoteForTheDay() As String Get QuoteForTheDay = quoteValue Exit Property End Get End Property如果您使用
Exit Property而不將值指派給name,則Get程序會傳回屬性資料類型的預設值。Return陳述式會同時將傳回值指派給Get程序,並結束程序。 以下範例說明這點。Private quoteValue As String = "No quote assigned yet."ReadOnly Property QuoteForTheDay() As String Get Return quoteValue End Get End Property
範例
下列範例會在類別中宣告屬性。
Class Class1
' Define a local variable to store the property value.
Private propertyValue As String
' Define the property.
Public Property Prop1() As String
Get
' The Get property procedure is called when the value
' of a property is retrieved.
Return propertyValue
End Get
Set(ByVal value As String)
' The Set property procedure is called when the value
' of a property is modified. The value to be assigned
' is passed in the argument to Set.
propertyValue = value
End Set
End Property
End Class
參數化屬性
下列範例示範如何建立參數化屬性,也稱為索引子,以允許以類似陣列的方式存取集合:
Class SampleCollection
' Define a local collection to store strings.
Private items As New List(Of String)
' Define a parameterized property (indexer) for the collection.
Default Public Property Item(ByVal index As Integer) As String
Get
' Return the item at the specified index.
If index >= 0 AndAlso index < items.Count Then
Return items(index)
Else
Return Nothing
End If
End Get
Set(ByVal value As String)
' Set the item at the specified index.
If index >= 0 AndAlso index < items.Count Then
items(index) = value
ElseIf index = items.Count Then
' Allow adding new items at the end.
items.Add(value)
End If
End Set
End Property
' Add a Count property for convenience.
Public ReadOnly Property Count As Integer
Get
Return items.Count
End Get
End Property
' Add method to add items.
Public Sub Add(ByVal item As String)
items.Add(item)
End Sub
End Class
如需屬性使用的完整範例,包括自動實作、混合存取層級和驗證案例,請參閱 屬性程式。