【问题标题】:Windows Runtime methods cannot be generic - Reasons, Workarounds, Alternatives?Windows 运行时方法不能是通用的 - 原因、解决方法、替代方法?
【发布时间】:2012-08-29 09:06:43
【问题描述】:

这是一个接口,取自我尝试将我维护的事件聚合器 MemBus 移植到 Windows 运行时世界:

public interface ISubscriber
{
    IDisposable Subscribe<M>(Action<M> subscription);

    #if WINRT 
    [Windows.Foundation.Metadata.DefaultOverload]
    #endif
    IDisposable Subscribe(object subscriber);

    IObservable<M> Observe<M>();
}

我得到的是编译器错误:

“错误 WME1031:'MemBus.ISubscriber.Subscribe&lt;M&gt;(System.Action&lt;M&gt;)' 是泛型方法。Windows 运行时方法不能是泛型的。”

我只是怀疑为什么会这样,如果有人可以澄清,请做。

我的主要问题是:将代码移植到 Windows 运行时时我们应该如何处理这个问题

许多更高级别的功能发生在泛型上。事实上,我们在 Windows 运行时使用泛型类(例如List&lt;T&gt;)。 RT 组件应该如何公开泛型类型,如果没有,是否是唯一可用于返回编写 .NET 1.1 代码的方法,即对象输入、对象输出和执行转换?

【问题讨论】:

    标签: c# windows-runtime windows-store


    【解决方案1】:

    简而言之,JavaScript 不知道如何处理泛型,因此 WinRT 组件无法使用它们。请参阅WinRT reason for disallowing custom generic types or interfaces 进行更长时间的讨论。

    【讨论】:

      【解决方案2】:

      您需要从 Windows 应用商店模板(不是 Windows 运行时组件模板)中选择一个类库模板。

      这将允许您在 Windows 应用商店应用程序中使用完整的 C# 语言,但不允许 C++ 和 JS 等其他语言使用程序集(因为它们不像 C# 那样支持泛型) .

      【讨论】:

      • 我将此标记为答案,因为我正在考虑移植。在移植一个原本主要由其他 .NET 语言使用的 .NET 库时,将自己限制为以 C# 为目标并跳过 C++/Javascript 支持以使 C# 开发人员多年来一直知道许多结构似乎是有意义的。当谈到新的发展时,答案可能会有所不同。
      猜你喜欢
      • 1970-01-01
      • 2022-01-25
      • 2012-11-08
      • 2021-03-20
      • 1970-01-01
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多