Windows 8 ランタイム (WinRT / Windows ストア アプリ / Windows 10 ユニバーサル アプリ) は Silverlight や WPF と比べてどうですか? [closed] 質問する

Windows 8 ランタイム (WinRT / Windows ストア アプリ / Windows 10 ユニバーサル アプリ) は Silverlight や WPF と比べてどうですか? [closed] 質問する

私は、Windows 8の新しいランタイムを理解しようとしています。メトロスタイルのアプリです。翻訳また、.NET ベースなので、C# や VB.NET を使用してアプリを作成できますが、HTML、CSS、DOM、JavaScript とも関係があるようです。

誰か、.NET UI プログラマーが理解できる言葉で、それが何なのかを数段落で説明してくれませんか? (理解するために必要な「重要な」ものが欠けています。)


ご存知の通り、WPFはシルバーライトWindows フォームなどは、少なくとも Intel システムでは Windows 8 (および Windows 10) でも引き続き動作しますので、そんなことは言わないでください...

ベストアンサー1

最も低いレベルでは、WinRT は ABI レベルで定義されたオブジェクト モデルです。COM をベースとして使用し (したがって、すべての WinRT オブジェクトはIUnknownrefcounting を実装して実行します)、そこから構築されます。古い COM と比較して、WinRT には多くの新しい概念が追加されていますが、そのほとんどは .NET から直接派生したものです。たとえば、WinRT オブジェクト モデルにはデリゲートがあり、イベントは、イベント ソースとシンクの古い COM モデルではなく、.NET スタイル (イベントごとに 1 つのデリゲートとサブスクライバーの追加/削除メソッドを使用) で実行されます。その他の注目すべき点として、WinRT にはパラメーター化された (「汎用」) インターフェイスもあります。

もう 1 つの大きな変更点は、.NET アセンブリと同様に、すべての WinRT コンポーネントにメタデータが利用できるようになったことです。COM では、typelib でメタデータが利用できましたが、すべての COM コンポーネントにメタデータがあるわけではありません。WinRT の場合、メタデータは .winmd ファイルに含まれています。Developer Preview の「C:\Program Files (x86)\Windows Kits\8.0\Windows Metadata\」内を見てください。調べてみると、実際にはコードがなく、メタデータ テーブルだけの CLI アセンブリであることがわかります。実際、ILDASM で開くことができます。ただし、これは WinRT 自体が管理されているという意味ではなく、単にファイル形式を再利用しているだけです。

さらに、そのオブジェクト モデルに関して実装されたライブラリが多数あり、WinRT インターフェイスとクラスが定義されています。ここでも、上記の「Windows Metadata」フォルダーを見て、そこに何があるかを確認してください。または、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.ControlsWindows.UI.Xaml.Documentsも同様です。

現在、.NET には、WinRT コンポーネントを .NET アセンブリのように直接参照する機能があります。これは COM 相互運用とは動作が異なります。相互運用アセンブリなどの中間成果物は必要ありません。必要な/rのは .winmd ファイルだけです。メタデータ内のすべての型とそのメンバーは、.NET オブジェクトのように表示されます。WinRT ライブラリ自体は完全にネイティブです (したがって、WinRT を使用するネイティブ C++ プログラムには CLR はまったく必要ありません)。これらすべてを管理対象として公開する魔法は CLR 自体の中にあり、かなり低レベルです。.winmd を参照する .NET プログラムを実行すると、実際には extern アセンブリ参照のように見えることがわかります。型の埋め込みなどの巧妙なトリックはありません。

これは単純なマッピングではありません。CLR は、可能な場合は WinRT 型を同等のものに適応させようとします。たとえば、GUID、日付、URI はそれぞれ 、 、 になり、 や などの WinRT コレクション インターフェイスは 、 になりますSystem.GuidSystem.DateTimeこれは双方向System.UriですIIterable<T>。を実装する .NET オブジェクトがあり、それを WinRT に渡すと、 として認識されます。IVector<T>IEnumerable<T>IList<T>IEnumerable<T>IIterable<T>

最終的に、これが意味するのは、.NET Metro アプリが既存の標準 .NET ライブラリのサブセット、および (ネイティブの) WinRT ライブラリ (特に、API の点で Silverlight と非常によく似ているもの) にアクセスできるということです。UI を定義するには XAML を使用し、データ バインディング、リソース、スタイル、テンプレートなど、Silverlight と同じ基本概念を扱います。多くの場合、新しい名前空間と、API が調整されたコード内のいくつかの場所を微調整するWindows.UIだけで、Silverlight アプリを移植できます。using

WinRT 自体は HTML や CSS とは何の関係もありません。JavaScript と関係があるのは、.NET の場合と同様に、JavaScript でも公開されているという点だけです。.NET Metro アプリで WinRT UI ライブラリを使用する場合、HTML/CSS/JS を扱う必要はありません (本当に必要な場合は、コントロールをホストできますがWebView...)。.NET と Silverlight のスキルはすべて、このプログラミング モデルで非常に役立ちます。

おすすめ記事