Я нашел некоторое интересное поведение с тем, как VB.NET обрабатывает сигнатуры функций. Это новое поведение началось в VS2012 и продолжает сохраняться в VS2013.Новое поведение подписи функции VB.NET в Visual Studio 2012/2013
Рассмотрим следующий фрагмент кода:
Class test
Function a(x As String, Optional y As Boolean = False) As String
Return "function a() was called"
End Function
Function a(x As String) As String
Return "second function a() was called"
End Function
End Class
Моя первая мысль, что это не будет компилироваться, что верно в VS2010 и более ранних версиях. Однако VS2012 и VS2013 компилируют код без предупреждения. Если вы затем выполните следующее:
Dim x As New test()
MsgBox(x.a("123"))
Сообщение указывает, что вызывается функция без необязательного параметра.
Есть ли способ отключить это поведение? Казалось бы, это может открыть дверь разработчику, неосознанно добавляя функции с тем же именем, что и другие функции, которые имеют необязательные параметры, вызывая нежелательные переадресации.
Вы должны действительно отказаться от использования функции 'MsgBox', которая существует только по соображениям совместимости при переносе из старого Код VB6. 'System.Windows.Forms.MessageBox.Show (...)' - путь. –
Как сказал Дэвид Р в своем ответе, у C# такое же поведение. Поэтому, если это изменение устраняет различия между VB.NET и C#, я считаю это хорошим изменением. –
Аргумент просто не является дополнительным, когда вы предоставляете перегрузку. Напишите здравый код, и все части встанут на свои места. –