为什么WinRT中需要DefaultOverloadAttribute?

时间:2013-01-22 16:15:51

标签: c# javascript .net windows-8 windows-runtime

我最近有一个WinRT类定义,其方法如下:

public void Foo(string x){}
public void Foo(CustomClass x){}

编译器抛出错误

  

Earlz.FooBar的1参数重载必须通过使用Windows.Foundation.Metadata.DefaultOverloadAttribute进行装饰,将一个方法指定为默认重载。

这个属性有什么影响?我不熟悉WinRT预测的工作方式,但我写的内容最终将成为一个公开可用的API。所以,我想确保我没有做一些会给使用API​​的人带来痛苦的事情。我应该将Foo方法重命名为FooCustom或其他类似方法,还是在更常用的函数上使用DefaultOverload?

此外,我尝试查找此属性的作用以及为什么需要这样做,但MSDN像往常一样缺少详细信息并且仅提供单句描述“表示方法是默认的重载方法”

我认为这个属性的主要原因是因为Javascript只支持参数计数的重载,而不支持参数类型。但是,Javascript应用程序如何使用类型重载访问非默认的WinRT方法?

1 个答案:

答案 0 :(得分:4)

正如Jesse Jiang在this thread中所描述的那样:

  

JavaScript对区分重载方法的能力有限。因此,您需要更改函数名称,或设置Windows :: Foundation :: Metadata :: DefaultOverloadAttribute以设置默认重载函数。