14

这是一个接口,取自我尝试将我维护的事件聚合器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<M>(System.Action<M>)' 是通用方法。Windows 运行时方法不能是通用的。”

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

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

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

4

2 回答 2

12

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

截图VS2012

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

于 2012-09-05T07:39:31.250 回答
6

简短的故事是 JavaScript 不知道如何处理泛型,因此 WinRT 组件无法使用它们。请参阅WinRT 不允许自定义泛型类型或接口的原因以进行更长时间的讨论。

于 2012-09-04T23:02:21.200 回答