我最近有一个WinRT类定义,其方法如下:
public void Foo(string x){}
public void Foo(CustomClass x){}
虽然编译器抛出了错误
The 1-parameter overloads of Earlz.FooBar must have exactly one method specified as the default overload by decorating it with Windows.Foundation.Metadata.DefaultOverloadAttribute.
这个属性有什么样的含义?我不熟悉WinRT预测的工作方式,但我写的内容最终将成为一个公开可用的API.所以,我想确保我没有做一些会给使用API的人带来痛苦的事情.我应该将我的Foo方法重命名为FooCustom或其他类似的方法,还是在更常用的函数上使用DefaultOverload的方式去?
此外,我尝试查找此属性的作用以及为什么需要它,但是MSDN像往常一样缺少细节并且只给出单句描述“表示方法是默认的重载方法”
我假设这个属性的主要原因是因为Javascript只支持参数计数的重载,而不支持参数类型.但是,Javascript应用程序如何访问具有类型重载的非默认WinRT方法?
最佳答案
正如Jesse Jiang在this thread所描述的那样:
JavaScript has limited ability to differentiate overloaded methods. Therefore,you need to change the function name,or setting the Windows::Foundation::Metadata::DefaultOverloadAttribute to set the default overload function.