Подтвердить что ты не робот

Методы Windows Runtime не могут быть общими - причины, обходные пути, альтернативы?

Вот интерфейс, взятый из моей попытки связать 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 Runtime не могут быть общими."

У меня есть только подозрения относительно того, почему это так, если кто-нибудь может прояснить, пожалуйста.

Мой главный вопрос: Как мы должны справляться с этим при переносе кода в среду выполнения Windows?

Многие функции более высокого уровня происходят с дженериками. Фактически, мы используем общие классы в среде выполнения Windows (например, List<T>). Как RT-компонент должен выставлять общие типы, а если нет, это единственная альтернатива, доступная для возврата к способу написания кода .NET 1.1, т.е. Объекта в объекте и выполнения операций?

4b9b3361

Ответ 1

Вам нужно выбрать шаблон Class Library из шаблонов Windows Store (а не шаблон компонента Runtime Windows).

Screenshot VS2012

Это позволит вам использовать полный язык С# в приложении Windows Store, но не позволит другим языкам, таким как С++ и JS, использовать сборку (поскольку они не поддерживают генерики так же, как это делает С#),.