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

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

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

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

宣告預設屬性

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

  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,以稍微減少預設屬性錯誤的機會。

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

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

另請參閱