VB アプリケーションでインターフェイスを定義しているときに、Visual Studio 2010 で何か紛らわしい、または潜在的なバグに遭遇しました。Double 型の既定のパラメーターを使用してインターフェイス メソッドを定義するときに、Double.NaN 定数を既定値として使用すると、コード エディターでエラーが発生します。 /intellisense/precompiler いくつかの問題。
次のコードは、"INaNTest" と "INaNTest.DoSomething" に下線を引いており、インターフェイス 'INaNTest' に一致するサブルーチンがないため、'DoSomething' は 'DoSomething' を実装できないと主張しています。
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" に下線が引かれ (Class 'NaNTest' must ...)、"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' は宣言されていません。保護レベルが原因でアクセスできない可能性があります。) コード エディターが無効なコードを再度挿入しました。
VB.net のインターフェイスで定義されているメソッドのデフォルト値として Double.NaN を使用する正しい解決策はありますか、それともこれが不可能な根本的な理由はありますか?
どうもありがとう、JCollins