javascript - 重载属性有什么用?

标签 javascript .net windows-runtime overloading windows-store-apps

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

Identifies the method as an overload in a language that supports overloading.

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

最佳答案

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

让我们看一个例子。以下是 Windows.Foundation.idl 文件中 IUriRuntimeClassFactory 的定义,您可以在 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);
}

这两个接口(interface)函数在 IDL 中使用不同的名称进行声明。这两个函数都使用 IDL overload 属性进行注释。此属性告诉 IDL 编译器这两个成员函数在逻辑上都是 CreateUri 的重载。

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

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

关于javascript - 重载属性有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14506067/

相关文章:

javascript - 如何使用真正的 Android 设备上下滚动和滑动? Appium版本1.7.1

c# - struct tostring() 方法重定向到抽象类 ValueType

javascript - 单击表格单元格时,获取隐藏的 div 以显示在表格单元格下方

Javascript:历史记录未加载页面

javascript - iframe 相对自身的位置

c# - 在这种情况下 Dispose() 会导致提前释放资源吗?

c# - 通过参数的基类初始化交付类?

c# - 如何从 WinRT/Windows 应用商店应用程序发送电子邮件?

c# - 如何从 C++ 后台任务(Windows 通用应用程序)调用 C# 函数?

c++ - Visual Studio 链接器无法写入 [十六进制数]