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'.