在我的 VB 应用程序中定义接口时,我在 Visual Studio 2010 中遇到了一些令人困惑或可能存在的错误:使用 Double 类型的默认参数定义接口方法时,使用 Double.NaN 常量作为默认值会导致代码编辑器/intellisense/precompiler 一些问题。
以下代码在“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”上的“错误纠正选项”按钮,并在“INaNTest”中选择“为“DoSomething”生成方法存根,添加的方法存根是:
Sub DoSomething(ByVal x As Double,
Optional ByVal a As Double = NaN)
现在“NaN”已经与“Double”分离了。前缀和下划线(未声明“NaN”。由于其保护级别,它可能无法访问。)代码编辑器再次插入了无效代码。
是否有使用 Double.NaN 作为在接口上定义的方法的默认值的正确解决方案,在 VB.net 中,或者是否有根本原因导致这是不可能的?
非常感谢,JCollins