共用方式為


Property 語句

宣告屬性的名稱,以及用來儲存及擷取屬性值的屬性程序。

語法

[ <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) 或是 GetSet 程序的屬性 (Attribute) 清單。 請參閱屬性清單

  • Default

    選擇性。 指定此屬性是其定義所在類別或結構的預設屬性。 預設屬性必須接受參數,且可以進行設定和擷取,而不需要指定屬性名稱。 如果您將屬性宣告為 Default,則無法在屬性或其任一屬性程序上使用 Private。 如需範例和詳細指引,請參閱 如何:在 Visual Basic 中宣告和呼叫預設屬性

  • accessmodifier

    Property 陳述式上和最多其中一個 GetSet 陳述式上是選擇性的。 可以是下列其中一項:

    請參閱 Access levels in Visual Basic

  • propertymodifiers

    選擇性。 可以是下列其中一項:

  • Shared

    選擇性。 請參閱 Shared

  • Shadows

    選擇性。 請參閱 Shadows

  • ReadOnly

    選擇性。 請參閱 ReadOnly

  • WriteOnly

    選擇性。 請參閱 WriteOnly

  • Iterator

    選擇性。 請參閱迭代器

  • name

    必要。 屬性的名稱。 請參閱 Declared Element Names

  • parameterlist

    選擇性。 區域變數名稱清單,代表此屬性的參數,也可能代表 Set 程序的其他參數。 參數化屬性通常用來建立索引子或預設屬性,以允許類似集合的存取。 請參閱 參數清單如何:在 Visual Basic 中宣告和呼叫預設屬性

  • returntype

    如果 Option StrictOn,則為必要項。 此屬性所傳回值的資料類型。

  • Implements

    選擇性。 表示此屬性會實作一或多個屬性,每個屬性都會在此屬性包含類別或結構所實作的介面中定義。 請參閱 Implements 陳述式

  • implementslist

    如果使用 Implements,則為必要項。 所正在實作的屬性清單。

    implementedproperty [ , implementedproperty ... ]

    每個 implementedproperty 都具有下列語法和組件:

    interface.definedname

    部分 描述
    interface 必要。 此屬性包含類別或結構所實作的介面名稱。
    definedname 必要。 用來在 interface 中定義屬性的名稱。
  • Get

    選擇性。 如果屬性標示為 ReadOnly,則為必要項。 啟動用來傳回屬性值的 Get 屬性程序。 Get語句不會與自動實作的屬性搭配使用。

  • statements

    選擇性。 要在 GetSet 程序中執行的陳述式區塊。

  • End Get

    終止 Get 屬性程序。

  • Set

    選擇性。 如果屬性標示為 WriteOnly,則為必要項。 啟動用來儲存屬性值的 Set 屬性程序。 Set語句不會與自動實作的屬性搭配使用。

  • End Set

    終止 Set 屬性程序。

  • End Property

    終止此屬性的定義。

備註

Property 陳述式引進屬性的宣告。 屬性可以有 Get 程序 (唯讀)、Set 程序 (唯寫),或兩者皆有 (讀寫)。 使用自動實作的屬性時,您可以省略 GetSet 程式。 如需詳細資訊,請參閱 自動實作的屬性

您只能在類別層級使用 Property。 這表示屬性的「宣告內容」必須是類別、結構、模組或介面,且不能是原始程式檔、命名空間、程序或區塊。 如需詳細資訊,請參閱宣告內容和預設存取層級

根據預設,屬性會使用公用存取。 您可以在 Property 陳述式上使用存取修飾詞來調整屬性的存取層級,也可以選擇性地將其中一個屬性程序調整為更嚴格的存取層級。 如需混合存取層級的詳細範例,請參閱 如何:宣告具有混合存取層級的屬性

Visual Basic 會在屬性指派期間將參數傳遞至 Set 程序。 如果您未提供 Set 的參數,則整合式開發環境 (IDE) 會使用名為 value 的隱含參數。 此參數會保留要指派給屬性的值。 您通常會將此值儲存在私用區域變數中,並在每次呼叫 Get 程序時傳回。

規則

  • 混合的存取層級。 如果您要定義讀寫屬性,您可以選擇性地為 GetSet 程序指定不同的存取層級,但不能同時指定兩者。 如果您這樣做,程序存取層級必須比屬性的存取層級更嚴格。 例如,如果屬性已宣告為 Friend,您可以將 Set 程序宣告為 Private,但不能宣告為 Public

    如果您要定義 ReadOnlyWriteOnly 屬性,則單一屬性程序 (分別為 GetSet) 會代表所有屬性。 您無法為這類程序宣告不同的存取層級,因為這會為屬性設定兩個存取層級。

  • 傳回型別。 Property 陳述式可以宣告傳回值的資料類型。 您可以指定任何資料類型,或是列舉、結構、類別或介面的名稱。

    如果您未指定 returntype,則屬性會傳回 Object

  • 實作。 如果此屬性使用 Implements 關鍵字,則包含類別或結構必須在其 ImplementsClass 陳述式後面緊接著 Structure 陳述式。 Implements 陳述式必須包含 implementslist 中指定的每個介面。 不過,介面用來定義 Property 的名稱 (在 definedname 中) 無需與此屬性的名稱 (在 name 中) 相同。

行為

  • 從屬性程序返回。GetSet 程序返回呼叫程式碼時,會繼續執行接在叫用陳述式後面的陳述式。

    Exit PropertyReturn 陳述式會導致屬性程序立即結束。 任意數目的 Exit PropertyReturn 陳述式可以出現在程序中的任何位置,且您可以混合 Exit PropertyReturn 陳述式。

  • 傳回值。 若要從 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

如需屬性使用的完整範例,包括自動實作、混合存取層級和驗證案例,請參閱 屬性程式

另請參閱

房產類型和特點

進階屬性場景