私はC#クラスライブラリを作成していて、それをJavascriptコード(技術的にはJscript.NET)から呼び出しています。最近、オーバーロードされたメソッドをいくつか追加しましたが、Javascriptは変数のタイプを常に認識しているとは限らないため、呼び出すメソッドを決定するのに問題があります。ほとんどの場合、これが発生している理由は理解できますが、理解できない例が1つあります。
C#クラスのオーバーロードされたメソッド宣言は次のとおりです。
public virtual DeviceMessage RequestInUnits(
Command command,
int value,
UnitOfMeasure unit)
public virtual DeviceMessage RequestInUnits(
Command command,
Measurement measurement)
私のアプリケーションには、Jscript.NETを使用するスクリプト機能があります。C#クラスでこれらのメソッドの1つを呼び出そうとするJavascriptコードを次に示します。
c.RequestInUnits(Command.MoveAbsolute, 0);
Measurement
2つのパラメーターを持つ唯一のメソッドは、2番目のパラメーターとしてオブジェクトを想定しているため、これは正当な呼び出しではありません。ただし、タイプの不一致エラーが予想されます。代わりに、これが私が得るコンパイルエラーです。
More than one method or property matches this argument list at line 3 column 1
をに置き換える0
と""
、タイプの不一致エラーが発生します。なぜJavascriptは数値をオブジェクトに変換できると考えるのですか?タイプを複数のメソッドに強制変換できると考えるのはなぜですか?1つのメソッドのみが2つのパラメーターを取ります。
これは重大な問題ではありませんが、ライブラリがコードの呼び出しで紛らわしいエラーメッセージを表示する場合は気になりません。できればそれは避けたいと思います。