共用方式為


如何:在 Visual Basic 中宣告和呼叫預設屬性

默認屬性是程式代碼不需要指定即可存取的類別或結構屬性。 呼叫程式代碼時,會為類別或結構命名,但不是屬性,而且內容允許存取屬性時,如果存在,Visual Basic 就會解析該類別或結構之預設屬性的存取權。

類別或結構最多可以有一個預設屬性。 不過,您可以多載預設屬性,並擁有一個以上的版本。

如需詳細資訊,請參閱 預設值

宣告預設屬性

  1. 以一般方式宣告屬性。 請勿指定 SharedPrivate 關鍵詞。

  2. Default 屬性宣告中包含 關鍵詞。

  3. 為屬性指定至少一個參數。 您無法定義不採用至少一個自變數的預設屬性。

    Default Property myProperty(ByVal index As Integer) As String
    

呼叫預設屬性

  1. 宣告包含類別或結構型別的變數。

    Dim x As New class1(3)
    
  2. 在通常包含屬性名稱的表示式中單獨使用變數名稱。

    MsgBox(x)
    
  3. 請遵循變數名稱,並在括弧中加上自變數清單。 預設屬性必須至少接受一個參數。

    MsgBox(x(1))
    
  4. 若要擷取預設屬性值,請在表示式中搭配參數清單使用變數名稱,或者在指派語句的等號 (=) 之後使用。

    MsgBox(x(1) & x(2) & x(3))
    
  5. 若要設定預設屬性值,請使用變數名稱,搭配工作分派語句左邊的自變數清單。

    x(1) = "Hello"
    x(2) = " "
    x(3) = "World"
    
  6. 您一律可以指定預設屬性名稱與變數名稱,就像存取任何其他屬性一樣。

    x.myProperty(1) = "Hello"
    x.myProperty(2) = " "
    x.myProperty(3) = "World"
    

範例 1

下列範例會宣告 類別上的預設屬性。

Public Class class1
    Private myStrings() As String
    Sub New(ByVal size As Integer)
        ReDim myStrings(size)
    End Sub
    Default Property myProperty(ByVal index As Integer) As String
        Get
            ' The Get property procedure is called when the value
            ' of the property is retrieved.
            Return myStrings(index)
        End Get
        Set(ByVal Value As String)
            ' The Set property procedure is called when the value
            ' of the property is modified.
            ' The value to be assigned is passed in the argument 
            ' to Set.
            myStrings(index) = Value
        End Set
    End Property
End Class

範例 2

下列範例示範如何在 類別 myProperty上呼叫預設屬性class1。 三個指派語句將值儲存在 myProperty 中,而呼叫 MsgBox 來讀取值。

Sub Test()
    Dim x As New class1(3)
    x(1) = "Hello"
    x(2) = " "
    x(3) = "World"
    MsgBox(x(1) & x(2) & x(3))
End Sub

默認屬性最常見的用法是 Item[] 各種集合類別上的 屬性。

健全的程式設計

默認屬性可能會導致原始程式碼字元減少,但可能會使您的程式代碼更難閱讀。 如果呼叫程式代碼不熟悉您的類別或結構,當它對類別或結構名稱進行參考時,則無法確定該參考會存取類別或結構本身,或默認屬性。 這可能會導致編譯程式錯誤或細微的運行時間邏輯錯誤。

您可以一律使用 Option Strict 語句 ,將編譯程式類型檢查設定為 On,以稍微減少預設屬性錯誤的機會。

如果您打算在程式代碼中使用預先定義的類別或結構,則必須判斷它是否有預設屬性,如果是,則其名稱為何。

由於這些缺點,您應該考慮不要定義預設屬性。 為了提高程式碼的可讀性,您應該一律明確列出所有屬性,甚至包括預設屬性。

另請參閱