Я столкнулся с чем-то непонятным или, возможно, с ошибкой в Visual Studio 2010 при определении интерфейса в моем приложении VB: при определении метода интерфейса с параметром по умолчанию типа Double использование константы Double.NaN в качестве значения по умолчанию вызывает редактор кода / intellisense / прекомпилятор некоторые проблемы.
Следующий код подчеркивает «INaNTest» и «INaNTest.DoSomething», утверждая, что «DoSomething» не может реализовать «DoSomething», потому что в интерфейсе «INaNTest» нет соответствующего подпрограммы:
Public Class NaNTest
Implements INaNTest
Public Sub DoSomething(ByVal x As Double,
Optional ByVal a As Double = Double.NaN)
Implements INaNTest.DoSomething
End Sub
End Class
Public Interface INaNTest
Sub DoSomething(ByVal x As Double,
Optional ByVal a As Double = Double.NaN)
End Interface
Удаление реализации и начиная с:
Public Class NaNTest
Implements INaNTest
End Class
Public Interface INaNTest
Sub DoSomething(ByVal x As Double,
Optional ByVal a As Double = Double.NaN)
End Interface
, где теперь "NaNTest" подчеркнут (класс "NaNTest" должен ...), нажатие клавиши возврата в конце строки "Implements INaNTest" (т.е. автоматически вставляет реализацию) добавляет реализацию:
Public Sub DoSomething(ByVal x As Double,
Optional ByVal a As Double = -1.#IND)
Implements INaNTest.DoSomething
End Sub
, в котором редактор кода затем подчеркивает «#» (ожидается идентификатор). Таким образом, код автоматически добавляет код, который не является правильным.
В качестве альтернативы теперь, начиная с приведенного выше исходного кода, используя кнопку «Параметры исправления ошибок» на подчеркнутом «INaNTest.DoSomething» и выбирая «Создать заглушку метода для« DoSomething »в« INaNTest », добавленная заглушка метода: *
Sub DoSomething(ByVal x As Double,
Optional ByVal a As Double = NaN)
где теперь «NaN» оторван от «Двойника». префикс и подчеркнутый («NaN» не объявлен. Может быть недоступен из-за уровня защиты.) Редактор кода снова вставил неверный код.
Есть ли правильное решение использовать Double.NaN в качестве значения по умолчанию для метода, определенного в интерфейсе в VB.net, или есть фундаментальная причина, почему это невозможно?
Большое спасибо,
JCollins