Je compile le code suivant sans problème. Bien sûr, j'obtiens une exception de distribution invalide lors de l'exécution du Dim C As IDoThingsC = GetThing_C()
. Est-ce que je manque quelque chose? Souhaitez-vous jamais retourner un objet qui ne répond pas à l'exigence d'interface pour une valeur de retour de fonction?Pourquoi les interfaces ne sont pas fortement typées?
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
Je ne vois pas comment il est compilé? Est-ce que je manque quelque chose? –
Est-ce que * vraiment * compiler sans problèmes? Je pense que "GetThing_C" ne serait pas compilé car il tente de retourner une instance ClassA en tant qu'interface IDoThingsC, qu'il n'implémente pas. –
C'est ce que je pensais. Il compile dans Visual Studio 2005 et dans Visual Studio 2010 Beta 2. – JRS