共用方式為


HOW TO:在 Visual Basic 中宣告及呼叫預設屬性

「預設屬性」(Default Property) 是程式碼可存取但不需指定的類別或結構屬性。 在呼叫程式碼命名類別或結構 (而非屬性),且內容允許存取屬性時,Visual Basic 會解析該類別或結構預設屬性 (如果有的話) 的存取權。

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

如需詳細資訊,請參閱Default (Visual Basic)

若要宣告預設屬性

  1. 以一般方式宣告屬性, 不要指定 Shared 或 Private 關鍵字。

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

  3. 至少為屬性指定一個參數, 無法定義未包含任何引數的預設屬性。

    Default Property myProperty(ByVal index As Integer) As String
    

若要呼叫預設屬性

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

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

    MsgBox(x)
    
  3. 變數名稱後面緊跟著以括號括住的引數清單, 預設屬性至少必須取用一個引數。

    MsgBox(x(1))
    
  4. 若要擷取預設屬性值,請在運算式中使用變數名稱 (含引數清單),或在指派陳述式 (Assignment Statement) 的等號 (=) 後面使用變數名稱。

    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"
    

範例

以下範例會在類別上宣告預設屬性:

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

這個程式碼範例也可做為 IntelliSense 程式碼片段。 在程式碼片段選擇器中,這個程式碼片段位於 [Visual Basic 語言] 中。 如需詳細資訊,請參閱 HOW TO:插入 IntelliSense 程式碼片段

下列範例會示範如何在類別 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

預設屬性的最常見用法是各種集合類別 (Collection Class) 上的 Item 屬性。

穩固程式設計

預設屬性可小幅度地減少原始程式碼字元,但會讓其他人更不容易看懂您的程式碼。 如果呼叫程式碼不熟悉您的類別或結構,則在它產生該類別或結構名稱的參考時,會無法確定該參考存取的是類別或結構本身或預設屬性。 這會造成編譯器錯誤,或微妙的執行階段邏輯錯誤。

您永遠可以使用 Option Strict 陳述式,將編譯器型別檢查 (Type Checking) 設為 On,以減少預設屬性錯誤的機會。

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

因為這些缺點,所以您應考慮不要定義預設屬性。 為了增加程式碼可讀性,也應考慮一律明確參考所有屬性 (甚至是預設屬性)。

請參閱

工作

HOW TO:建立屬性 (Visual Basic)

HOW TO:宣告混合存取層級的屬性 (Visual Basic)

HOW TO:呼叫屬性程序 (Visual Basic)

HOW TO:將值置入屬性 (Visual Basic)

HOW TO:取得屬性值 (Visual Basic)

參考

Property 陳述式

Default (Visual Basic)

概念

屬性程序 (Visual Basic)

程序參數和引數 (Visual Basic)

Visual Basic 中屬性和變數的差別