У меня следующий код компилируется без проблем. Конечно, я получаю недопустимое исключение литых при выполнении Dim C As IDoThingsC = GetThing_C()
. Я что-то упускаю? Вы когда-нибудь захотите вернуть объект, который не соответствует требованию интерфейса для возвращаемого значения функции?Почему интерфейсы не сильно типизированы?
Public Class ClassA
Public Sub DoThings_A()
Debug.Print("Doing A things...")
End Sub
End Class
Public Class ClassB
Implements IDoThingsC
Public Sub DoThings_B()
Debug.Print("Doing B things...")
End Sub
Public Sub DoThings_C() Implements IDoThingsC.DoThings_C
Debug.Print("Doing C things...")
End Sub
End Class
Public Interface IDoThingsC
Sub DoThings_C()
End Interface
Public Class aTest
Public Sub Test()
Dim C As IDoThingsC = GetThing_C()
C.DoThings_C()
End Sub
Public Function GetThing_C() As IDoThingsC
Dim Thing As ClassA = New ClassA
Thing.DoThings_A()
Return Thing
End Function
End Class
Я не вижу, как это скомпилировано? Я что-то упускаю? –
Это * действительно * компилируется без проблем? Я бы подумал, что «GetThing_C» не будет компилироваться, поскольку он пытается вернуть экземпляр ClassA в качестве интерфейса IDoThingsC, который он не реализует. –
Вот что я подумал. Он компилируется в Visual Studio 2005 и в Visual Studio 2010 Beta 2. – JRS