En effet, je trouve un cas qui peut facilement induire en erreur :
Considérons ces 2 méthodes :
Code:
1 2 3 4 5 6 7 8
|
Sub MySub(ByVal param1 As List(Of String))
Console.WriteLine(param1(0))
End Sub
Sub MySub(ByVal param1 As IList, Optional ByVal param2 As Boolean = True)
Console.WriteLine(param1(1))
End Sub |
Un utilisateur va appeler la méthode en utilisant la 2ème surcharge comme ceci :
Code:
1 2 3 4 5
|
Dim list As New List(Of String)
list.Add("1 er élément")
list.Add("2 nd élément")
MySub(list, True) |
Puis, plus tard il se rend compte que le 2ème paramètre est inutile. Il décide de le supprimer et il se rend compte alors que l'affichage dans la console n'est pas le même... :roll:
Je suis d'accord, il vaut mieux être plus rigoureux a l'écriture du code et la compilation si ça peut éviter des mauvaises surprise à l'exécution.
Par contre quand on utilise des classe VB depuis du code C#, ça devient vite galère (pour les raisons cité plus haut). On le voit déjà quand on développe un projet VSTO.