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

簡単に言うと、JavasScriptはジェネリックを処理する方法を知らないため、WinRTコンポーネントはジェネリックを使用できません。詳細については、カスタムジェネリック型またはインターフェイスを禁止するWinRTの理由を参照してください。

于 2012-09-04T23:02:21.200 に答える