我有幾個小類來表示搜索過濾器中的部分。如果搜索值等於NonValue
,則過濾器應該不做任何事情。這是在一個基類定義:然後多態性和陰影繼承成員
Private Class BaseFilter
Protected NonValue As Object
Protected sQueryStringBase As String = "AND {0} {1} {2} "
Public Sub CheckNonValue(ByVal QueryItem As Object)
'No Query if Item not valid
If Me.NonValue.Equals(Me.QueryItem) Then
Me.sQueryStringBase = String.Empty
End If
End Sub
End Class
BaseFilter
伸出供不同類型的字段:
Private Class StringFilter
Inherits BaseFilter
Protected Shadows NonValue As String = String.Empty
End Class
當我然後創建StringFilter並檢查允許值:
Dim stf As New StringFilter()
stf.CheckNonValue(MyString)
當我期望NonValue對象是String.Empty時,我得到一個NullReferenceException (NonValue = Nothing)
。這是我的代碼中的錯誤,還是我試圖以錯誤的方式實現多態?謝謝。
這就是我最終做的。但是基類似乎仍然用Object.Equals()來檢驗Equal(),它檢查內存地址。因此,我必須重寫子類中的CheckNonValue()方法,並在測試之前將我的NonValue轉換爲所需的類型
CType(Me.NonValue, String)
。 – Jonas 2009-11-20 14:25:31