「預設屬性」是一個類別或結構屬性,您的程式碼可以在不指定它的情況下進行存取。 當呼叫程式碼將類別或結構 (但非屬性) 命名,且內容允許存取屬性時,Visual Basic 就會解析對該類別或結構之預設屬性 (如果有的話) 的存取。
一個類別或結構最多只能有一個預設屬性。 不過,您可以多載預設屬性,並擁有一個以上的版本。
如需詳細資訊,請參閱預設。
宣告預設屬性
以正常方式宣告屬性。 請勿指定
Shared
或Private
關鍵字。在屬性宣告中包含
Default
關鍵字。為屬性指定至少一個參數。 您無法定義未接受至少一個引數的預設屬性。
Default Property myProperty(ByVal index As Integer) As String
呼叫預設屬性
宣告包含類別或結構類型的變數。
Dim x As New class1(3)
在您通常會包含屬性名稱的運算式中,單獨使用變數名稱。
MsgBox(x)
變數名稱後面跟著已加上括弧的引數清單。 預設屬性至少必須接受一個引數。
MsgBox(x(1))
若要擷取預設屬性值,請在運算式中搭配引數清單使用變數名稱,或在指派陳述式中後面接著等號 (
=
)。MsgBox(x(1) & x(2) & x(3))
若要設定預設屬性值,請在指派陳述式左側,搭配引數清單使用變數名稱。
x(1) = "Hello" x(2) = " " x(3) = "World"
您始終都能同時指定預設屬性名稱與變數名稱,就像存取任何其他屬性一樣。
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
,以減少預設屬性錯誤的機會。
如果您打算在程式碼中使用預先定義的類別或結構,則必須判斷它是否有預設屬性,如果是,則其名稱為何。
由於存在這些缺點,因此您應該考慮不要定義預設屬性。 為了讓程式碼有可讀性,您也應該考慮一律明確參考所有屬性,甚至是預設屬性。