默認屬性是程式代碼不需要指定即可存取的類別或結構屬性。 呼叫程式代碼時,會為類別或結構命名,但不是屬性,而且內容允許存取屬性時,如果存在,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
下列範例示範如何在 類別 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,以稍微減少預設屬性錯誤的機會。
如果您打算在程式代碼中使用預先定義的類別或結構,則必須判斷它是否有預設屬性,如果是,則其名稱為何。
由於這些缺點,您應該考慮不要定義預設屬性。 為了提高程式碼的可讀性,您應該一律明確列出所有屬性,甚至包括預設屬性。