2012-03-01 7 views
4

WinRTとビルドデッキを読んだ後、誰かが私たち自身のIFoo < T>を渡すことを禁止する特定の根拠を明らかにすることができますか?それは彼ら自身の認可されたジェネリックインターフェイスタイプのためですか?カスタムジェネリックタイプまたはインターフェイスを許可しない理由WinRTの理由

WinRTには、ジェネリック引数を記述、解決、渡すためのメカニズムが必要です。

C#クラスのユーティリティライブラリの一部を非汎用的な方法で「平坦化」することは想像できません。私は主にC++から使いたいと思っています。

自分のMSタイプと同じようにファーストクラスのIntellisenseとAPIのサポートが必要です。

だから...なぜ私たちはあまりにも上記のメカニズムを使用することはできませんか?これは緩和され、後で許可されるか、これは永久的な制限ですか?または、これは言語投影レイヤー自体が特定のジェネリックタイプをカスタム処理しているため、ジェネリックタイプに共通するWinRTの集中メタ処理がないためですか?

ありがとうございました。

+0

JSはジェネリック型すべて。コレクションはJS配列やオブジェクトとして機能しますが、一般的なジェネリック型はそうではありません。 – svick

+0

@svickありがとう、私はそれが事実かもしれないと思っていた。しかし、WinRTのためにMS内部インタフェースを生成できないのに対し、MS内部インタフェースはなぜ汎用的であるのかという疑問が依然として残っています。 – redgiant

+0

これらのインターフェイスは、JSから見たときに特別な処理を行い、動作させます。しかし、あなたのカスタムタイプは同じ特別な処理を得ることができませんでした。さらに、他のジェネリック型がJSからでも動作するとはどういうことでしょうか?私はそれが可能だとは思わない。 – svick

答えて

7

IXxxとして投影されるタイプは、「パラメータ化されたインタフェース」または「pinterfaces」と呼ばれるものによって実装されます。各言語のプロジェクションは、組み込みのパラメータ化されたインターフェイスを自然で使い慣れた方法で表現する方法を知っています。たとえば、IMapパラメータ化されたインターフェイスはCLRによってIDictionaryとして投影されます。

言語計画(特にJS)は、カスタムパラメータ化されたインターフェイスをどうするかわからないため、許可されていません。

今後この機能がWindowsに追加されることを知る方法がないため、この制限が緩和されるかどうかはわかりません。

+0

Larryに感謝しますが、重要な点は、pinterfaceなどのパブリック機能を投影のサブセットのみでサポートできるようにすることです。この場合、C++やC#のコンポーネントからジェネリックインターフェースを統合することができますが、JSでは使用できません。またはこれはC++や.NETの場合でも、ランタイムコードジェンツの問題ですか? – redgiant

+0

すべてのWindowsランタイム機能は、3つの言語予測をすべてサポートする必要があります.VERY限定の場合を除いて、わずか2つの言語の低レベルウィンドウランタイム機能を構築することはできません(たとえば、Xamlでは開封済みクラスをサポートする必要があり、これをサポートします。したがって、開封されていないクラスはC++およびCLRのみの機能です)。現実には、機能を無料で実装することはできません.Windows 8を構築するチームや言語の予測にはリソースが限られています。実装する機能を慎重に選択する必要があります。 –

1

はまた、コンポーネントを構築するための2つの利点

  • がある組成物による拡張は、コンポーネントのためのより良いモデルである(例えばC#のlibに(あなたはまだテストのためのインタフェースを使用することができます覚えている)彼らはただWinRTのように露出することがカントエクスポートコンポーネント

  • COMコール境界を越えない多型の呼び出しは、カントがインライン化されるため、パフォーマンスが悪くなる

私はJSがこれを制限しているとは思っていません。なぜなら、JSはオブジェクトを作成できないのですが、別のJS制限を追加することしかできないので、フレームワークインターフェイスはサポートされていません。

関連する問題