最低レベルでは、WinRTはABIレベルで定義されたオブジェクトモデルです。COMをベースとして使用するため(すべてのWinRTオブジェクトが実装IUnknown
して参照カウントを行います)、そこからビルドします。古いCOMに比べると、かなり多くの新しい概念が追加されています。そのほとんどは.NETから直接来ています。たとえば、WinRTオブジェクトモデルにはデリゲートがあり、イベントは.NETスタイルで行われます(デリゲートとサブスクライバーの追加/削除)イベントソースとシンクの古いCOMモデルではなく、イベントごとに1つのメソッド)。その他の注目すべき点として、WinRTにはパラメーター化された(「汎用」)インターフェースもあります。
もう1つの大きな変更は、.NETアセンブリと同様に、すべてのWinRTコンポーネントがメタデータを利用できることです。COMでは、typelibsでそれが少しありましたが、すべてのCOMコンポーネントがそれらを持っているわけではありません。WinRTの場合、メタデータは.winmdファイルに含まれています-開発者プレビューの「C:\ Program Files(x86)\ Windows Kits \ 8.0 \ Windows Metadata \」の中を見てください。ざっと見てみると、実際には、コードのないメタデータテーブルだけのCLIアセンブリであることがわかります。実際には、ILDASMで開くことができます。これは、WinRT自体が管理されているという意味ではありません。ファイル形式を再利用するだけです。
次に、そのオブジェクトモデルの観点から実装された多数のライブラリがあり、WinRTインターフェイスとクラスが定義されています。もう一度、上記の「Windowsメタデータ」フォルダーを見て、何があるかを確認してください。または、VSでオブジェクトブラウザを起動し、フレームワークセレクタで[Windows 8.0]を選択して、何がカバーされているかを確認します。そこにはたくさんあり、UIだけでは対処できません。また、、、Windows.Data.Json
またはWindows.Graphics.Printing
、などの名前空間も取得しますWindows.Networking.Sockets
。
次に、特にUIを処理するいくつかのライブラリを取得します。ほとんどのライブラリは、Windows.UI
またはの下のさまざまな名前空間Windows.UI.Xaml
です。それらの多くはWPF / Silverlight名前空間に非常によく似ています。たとえばWindows.UI.Xaml.Controls
、密接に一致していSystem.Windows.Controls
ます。Windows.UI.Xaml.Documents
などの同上。
現在、.NETは、WinRTコンポーネントを.NETアセンブリであるかのように直接参照する機能を備えています。これは、COM相互運用機能とは異なる動作をします。相互運用機能アセンブリなどの中間アーティファクトは必要ありません/r
。.winmdファイルだけで、すべての型とそのメタデータ内のメンバーが、.NETオブジェクトであるかのように表示されます。WinRTライブラリ自体は完全にネイティブであることに注意してください(したがって、WinRTを使用するネイティブC ++プログラムはCLRをまったく必要としません)。管理されているものをすべて公開する魔法はCLR自体の内部にあり、かなり低レベルです。.winmdを参照する.NETプログラムをildasmすると、実際にはexternアセンブリ参照のように見えることがわかります-そこに型を埋め込むなどの巧妙な手口はありません。
また、それは鈍いマッピングでもありません-CLRは、可能な場合、WinRTタイプを同等のものに適合させようとします。だから、例えばのGUID、日付とURIはなるSystem.Guid
、System.DateTime
とSystem.Uri
それぞれ。このようなWinRTの収集インターフェースIIterable<T>
とIVector<T>
なるIEnumerable<T>
とIList<T>
。等々。これは両方の方法で行われます-を実装する.NETオブジェクトがありIEnumerable<T>
、それをWinRTに返す場合、それはと見なされIIterable<T>
ます。
最終的に、これが意味することは、.NET Metroアプリが既存の標準.NETライブラリのサブセット、および(ネイティブの)WinRTライブラリにもアクセスできることです。これらのライブラリの一部は、特にWindows.UI
、SilverlightとAPIに非常によく似ています。UIを定義するためのXAMLがまだあり、Silverlightと同じ基本概念(データバインディング、リソース、スタイル、テンプレートなど)を処理します。多くの場合、using
新しい名前空間だけでSilverlightアプリを移植できます。 APIが調整されたコードのいくつかの場所を微調整します。
WinRT自体は、HTMLやCSSとは何の関係もありません。JavaScriptとの関係は、.NETの場合と同様に、JavaScriptにも公開されているという意味でのみ関係します。.NET MetroアプリでWinRT UIライブラリを使用する場合は、HTML / CSS / JSを処理する必要はありません(そうしたい場合は、WebView
コントロールをホストできます...)。.NETとSilverlightのスキルはすべて、このプログラミングモデルとの関連性が非常に高くなっています。