共用方式為


如何:在 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

下列範例示範如何在 class1 類別上呼叫預設屬性 myProperty。 這三個指派陳述式會將值儲存在 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,以減少預設屬性錯誤的機會。

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

由於存在這些缺點,因此您應該考慮不要定義預設屬性。 為了讓程式碼有可讀性,您也應該考慮一律明確參考所有屬性,甚至是預設屬性。

另請參閱