Кажется, Visual Studio перестает проверять параметры функции, когда один из параметров является интерфейсом.
Рассмотрим следующее:
' An interface and the class that implements it:
Public Interface IA
End Interface
Public Class A
Implements IA
End Class
' Another reference type for the demonstration:
Public Class MyReferenceType
End Class
' A function that uses IA as the type of one of its parameters:
Private Function SomeFunc(ByVal a As IA, ByVal r As MyReferenceType)
Return Nothing
End Sub
А вот пример проблем проверки типов:
Private Sub Example()
Dim a As IA = New A
Dim r As New MyReferenceType
' Some other random reference type, choose any
' other reference type you like
Dim list As New List(Of String)
' Each of these calls to SomeFunc compile without errors.
SomeFunc(r, r)
SomeFunc(r, a)
SomeFunc(list, r)
SomeFunc(list, a)
' Does not compile due to type mismatch
'SomeFunc(list, list)
End Sub
Как показывают мои комментарии, этот код компилируется нормально, сошибок в редакторе тоже нет.Если я выполню программу, то получу System.InvalidCastException
, что совсем не удивительно.Я предполагаю, что это ошибка проверки типов в компиляторе?Я использую Visual Studio 2005, поэтому это исправлено в более поздней версии VS?