검색 필터에서 부품을 나타내는 몇 개의 작은 클래스가 있습니다. 검색된 값이 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)
NullReferenceException (NonValue = Nothing)
, NonValue 개체를 String.Empty 것으로 예상 할 때 얻을. 이것은 내 코드의 버그입니까, 아니면 잘못된 방식으로 다형성을 얻으려고합니까? 감사.
이것이 내가 한 일이다. 하지만 기본 클래스는 여전히 메모리 주소를 확인하는 Object.Equals()를 사용하여 Equal()을 테스트하는 것처럼 보입니다. 따라서 하위 클래스의 CheckNonValue() 메서드를 재정의하고 테스트하기 전에 내 NonValue를 원하는 형식 인
CType(Me.NonValue, String)
으로 캐스팅해야했습니다. – Jonas