我正在编写一个 C# 类库,并从一些 Javascript 代码(技术上是 Jscript.NET)中调用它。我最近添加了一些重载方法,而 Javascript 无法决定调用哪个方法,因为它并不总是知道其变量的类型。我理解为什么在大多数情况下会发生这种情况,但我有一个我不理解的例子。
以下是 C# 类中的重载方法声明。
public virtual DeviceMessage RequestInUnits(
Command command,
int value,
UnitOfMeasure unit)
public virtual DeviceMessage RequestInUnits(
Command command,
Measurement measurement)
我的应用程序具有使用 Jscript.NET 的脚本功能。这是一些尝试在 C# 类上调用其中一种方法的 Javascript 代码。
c.RequestInUnits(Command.MoveAbsolute, 0);
这不是合法调用,因为唯一具有两个参数的方法需要一个Measurement
对象作为第二个参数。但是,我预计会出现类型不匹配错误。相反,这是我得到的编译错误。
More than one method or property matches this argument list at line 3 column 1
如果我将 替换为0
,""
则会收到类型不匹配错误。为什么Javascript认为它可以将数字转换为对象?为什么它认为它可以将类型强制为不止一种方法?只有一种方法需要两个参数。
这不是一个严重的问题,但是当我的库在调用代码时导致令人困惑的错误消息时,我不喜欢它。如果可以的话,我宁愿避免这种情况。