什么是过载属性用于?

时间:2013-01-24 16:27:59

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

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

  

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

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

1 个答案:

答案 0 :(得分:0)

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

我们来看一个例子。以下是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);
}

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

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

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