Create una class library in VB.NET e aggiungete questo codice:
Public
Class MyBug
Public Function Sum(ByVal a As Int32, Optional ByVal b As Int32 = 6) As Int32
Return a + b
End Function
End Class
Create un applicazione, compilate e lanciate l'eseguibile verificando che il risultato sia 10.
esempio:
Dim srv As New Server.MyBug
Dim iret As Int32 = srv.Sum(4)
MessageBox.Show(iret.ToString)
A questo punto ricompilate la class library sostituendo il valore di default di b da 6 a 20 e rilanciate l'eseguibile, risultato: 10!
Ma come, se il valore di b e' ora 20!
La soluzione la trovate in questo blog di Brad Abrams , date un occhiata ai commenti in alcuni casi anche C# potrebbe cadere in una situazione simile,e se vi state domandando il perche' VB.NET si comporta il questo modo 'stupido' la risposta e' che i default arguments non sono supportati da IL quindi il compilatore VB deve 'inventarseli'.