Вот интерфейс, взятый из моей попытки связать 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, т.е. Объекта в объекте и выполнения операций?