1

因此,在设计 API 时,我发现 Javascript 和重载以及所有有趣的东西存在一些问题。我认为可能有帮助的一件事是OverloadAttribute. 不过,这个问题的原因是我找不到任何关于它的作用的文档。MSDN提供了非常有用的信息

将方法标识为支持重载的语言中的重载。

显然,我需要比这更多的信息。那么,这究竟是用来做什么的呢?构造函数的string method参数是干什么用的?

4

1 回答 1

0

如文档所示,OverloadAttribute用于不支持重载的语言。例如,考虑使用 IDL 和 C++(不是 C++/CX)在 ABI 层编写 Windows 运行时代码。在 IDL 中,不能重载接口函数:接口的每个函数必须有不同的名称。

让我们看一个例子。这是IUriRuntimeClassFactory来自 Windows.Foundation.idl 文件的定义,您可以在 Windows 8 SDK 中找到该文件:

interface IUriRuntimeClassFactory : IInspectable
{
    [overload("CreateUri")] HRESULT CreateUri([in] HSTRING uri, [out] [retval] Windows.Foundation.Uri** instance);
    [overload("CreateUri")] HRESULT CreateWithRelativeUri([in] HSTRING baseUri, [in] HSTRING relativeUri, [out] [retval] Windows.Foundation.Uri** instance);
}

这两个接口函数在 IDL 中以不同的名称声明。这两个函数都使用 IDLoverload属性进行了注释。该属性告诉 IDL 编译器这两个成员函数在逻辑上都是CreateUri.

当 midlrt IDL 编译器从这个 IDL 生成一个 WinMD 文件时,它将交换重载名称和接口函数名称,以便在元数据中,这两个接口函数都将具有 name CreateUri,并且两个函数都将具有OverloadAttribute应用于它们的原始名称(CreateUri第一个和CreateWithRelativeUri第二个)。您可以通过使用 ildasm 查看参考 Windows.winmd 中的元数据来观察这一点。

当您从 WinMD 生成 IDL 时,会发生反向转换:使用 an 注释的接口函数OverloadAttribute使用该属性提供的名称命名。这允许 IDL 和 WinMD 之间的无损往返。

于 2013-01-24T16:56:28.787 回答