Au niveau le plus bas, WinRT est un modèle d'objet défini sur ABI niveau. Il utilise COM comme base (donc tous les WinRT objet implémente IUnknown
et ne compteurs refcount), et construit à partir de là. Il n'ajouter beaucoup de nouveaux concepts en comparaison à la COM de vieux, dont la plupart proviennent directement de .NET - par exemple, WinRT modèle d'objet a délégués, et les événements sont fait .NET-style (avec les délégués et les ajouter/supprimer un abonné méthodes, l'une par événement) plutôt que sur l'ancien modèle COM de cas sources et les puits. D'autres notables choses, WinRT a également paramétrées ("générique") interfaces.
Un autre grand changement est que tous les composants WinRT ont métadonnées disponibles pour eux, tout comme .NET assemblées. COM vous un peu sorta avait qu'avec les bibliothèques de types, mais pas chaque composant COM de les avoir. Pour WinRT, les métadonnées contenues dans .fichiers winmd - regarder à l'intérieur "C:\Program Files (x86)\Windows Kits\8.0\Windows Métadonnées\" Developer Preview. Si vous regardez attentivement, vous verrez qu'elles sont réellement CLI assemblées avec pas de code, juste des tables de métadonnées. Vous pouvez les ouvrir avec ILDASM, en fait. Remarque, cela ne signifie pas que WinRT lui-même géré - il réutilise le format de fichier.
Ensuite, il ya un certain nombre de bibliothèques mises en œuvre en termes de modèle d'objet - définition de WinRT d'interfaces et de classes. Encore une fois, regardez Windows "Métadonnées" dans le dossier mentionné ci-dessus pour voir ce qui est là; ou tout simplement le feu au Navigateur d'Objet dans VS et sélectionnez "Windows 8.0" dans le cadre du sélecteur, pour voir ce qui est couvert. Il y en a beaucoup, et qu'il ne s'occupe pas de l'INTERFACE utilisateur seul, vous obtenez également des espaces de noms tels que Windows.Data.Json
ou Windows.Graphics.Printing
ou Windows.Networking.Sockets
.
Ensuite, vous obtenez plusieurs bibliothèques, qui traite spécifiquement de l'INTERFACE utilisateur - la plupart de ces seraient différents espaces de noms sous Windows.UI
ou Windows.UI.Xaml
. Beaucoup d'entre eux sont très similaires à WPF/Silverlight espaces de noms - par exemple, Windows.UI.Xaml.Controls
est en étroite correspondance System.Windows.Controls
; idem pour Windows.UI.Xaml.Documents
etc.
Maintenant, .NET a la capacité de faire directement référence à WinRT composants comme si elles étaient .NET assemblées. Cela fonctionne différemment de COM Interop - vous n'avez pas besoin d'aucun intermédiaire d'artefacts tels que des assemblys interop, vous venez /r
une .winmd fichier, et tous les types et de leurs membres dans ses métadonnées deviennent visibles à vous comme si elles étaient .NET des objets. Notez que WinRT les bibliothèques elles-mêmes sont entièrement native (et donc la native de programmes C++ qui utilisent WinRT ne nécessitent pas de CLR) - la magie d'exposer toutes ces choses est géré à l'intérieur de la CLR lui-même, et il est assez bas niveau. Si vous ildasm un .NET programme qui fait référence à un .winmd, vous verrez qu'il ressemble en fait à un extern assemblée de référence - il n'y a pas de tour de passe-passe de la part de la tricherie comme le type d'incorporation.
Ce n'est pas un bout de cartographie, soit - CLR tente de s'adapter types WinRT pour leurs équivalents, lorsque cela est possible. Donc, par exemple, Guid, les dates et les Uri deviennent System.Guid
, System.DateTime
et System.Uri
, respectivement; WinRT collection des interfaces telles que IIterable<T>
et IVector<T>
deviennent IEnumerable<T>
et IList<T>
; et ainsi de suite. Cela va dans les deux sens - si vous avez un .NET objet qui implémente IEnumerable<T>
, et de passer à WinRT, il va voir ce qu' IIterable<T>
.
En fin de compte, ce que cela signifie, c'est que votre .NET applications Metro obtenir l'accès à un sous-ensemble de la norme existante .Bibliothèques NET, et aussi (native) WinRT bibliothèques, certains - en particulier Windows.UI
- très similaire à Silverlight, API, sage. Vous avez encore XAML pour définir votre INTERFACE utilisateur, et vous avez à traiter avec les mêmes concepts de base comme dans Silverlight - liaisons de données, les ressources, les styles, les modèles, etc. Dans de nombreux cas, il est possible de porter une application Silverlight simplement en using
les nouveaux espaces de noms, et de les retravailler un peu d'endroits dans le code de l'API a été ajusté.
WinRT lui-même n'a rien à voir avec le HTML et le CSS, et il faut bien le rapport à JavaScript que dans un sens qu'il est également exposée là, semblable à la façon dont c'est fait pour .NET. Vous n'avez pas besoin de traiter avec le HTML/CSS/JS lorsque vous utilisez WinRT de l'INTERFACE utilisateur des bibliothèques dans votre .NET application de Métro (enfin, je suppose que, si vous le voulez vraiment, vous pouvez héberger un WebView
de contrôle...). Toutes vos .NET et Silverlight compétences demeurent très pertinent dans ce modèle de programmation.