共用方式為


Property Statement

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

語法

[ <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

  • accessmodifier

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

    請參閱 Access levels in Visual Basic

  • propertymodifiers

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

  • Shared

    選擇性。 請參閱 Shared

  • Shadows

    選擇性。 請參閱 Shadows

  • ReadOnly

    選擇性。 請參閱 ReadOnly

  • WriteOnly

    選擇性。 請參閱 WriteOnly

  • Iterator

    選擇性。 請參閱迭代器

  • name

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

  • parameterlist

    選擇性。 區域變數名稱清單,代表此屬性的參數,也可能代表 Set 程序的其他參數。 請參閱參數清單

  • 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 關鍵字,則包含類別或結構必須在其 ClassStructure 陳述式後面緊接著 Implements 陳述式。 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

另請參閱