Pada level terendah, WinRT adalah model objek yang didefinisikan pada level ABI. Ia menggunakan COM sebagai basis (jadi setiap objek WinRT mengimplementasikan IUnknown
dan melakukan penghitungan ulang), dan membangun dari sana. Itu memang menambahkan cukup banyak konsep baru dibandingkan dengan COM yang lama, yang sebagian besar datang langsung dari .NET - misalnya, model objek WinRT memiliki delegasi, dan acara dilakukan .NET-style (dengan delegasi dan menambah / menghapus pelanggan metode, satu per peristiwa) daripada model COM sumber kejadian dan tenggelam. Dari hal-hal penting lainnya, WinRT juga memiliki antarmuka parametrized ("generic").
Satu perubahan besar lainnya adalah bahwa semua komponen WinRT memiliki metadata yang tersedia untuk mereka, seperti halnya .NET assemblies. Dalam COM Anda agak punya dengan typelibs, tetapi tidak setiap komponen COM memilikinya. Untuk WinRT, metadata terkandung dalam file .winmd - lihat di dalam "C: \ Program Files (x86) \ Windows Kits \ 8.0 \ Windows Metadata \" di Pratinjau Pengembang. Jika Anda mengaduk-aduk, Anda akan melihat bahwa mereka sebenarnya adalah kumpulan CLI tanpa kode, hanya tabel metadata. Anda dapat membukanya dengan ILDASM. Catatan, ini tidak berarti bahwa WinRT sendiri dikelola - hanya menggunakan kembali format file.
Lalu ada sejumlah perpustakaan diimplementasikan dalam hal model objek - mendefinisikan antarmuka dan kelas WinRT. Sekali lagi, lihat folder "Windows Metadata" yang disebutkan di atas untuk melihat apa yang ada di sana; atau jalankan Object Browser di VS dan pilih "Windows 8.0" di framework selector, untuk melihat apa yang dibahas. Ada banyak hal di sana, dan itu tidak berurusan dengan UI saja - Anda juga mendapatkan ruang nama seperti Windows.Data.Json
, atau Windows.Graphics.Printing
, atau Windows.Networking.Sockets
.
Kemudian Anda mendapatkan beberapa perpustakaan, yang secara khusus berurusan dengan UI - sebagian besar akan berbagai ruang nama di bawah Windows.UI
atau Windows.UI.Xaml
. Banyak dari mereka sangat mirip dengan WPF / ruang nama Silverlight - misalnya Windows.UI.Xaml.Controls
sangat cocok System.Windows.Controls
; Dato untuk Windows.UI.Xaml.Documents
dll
Sekarang, .NET memiliki kemampuan untuk mereferensikan komponen WinRT secara langsung seolah-olah mereka adalah .NET assemblies. Ini berfungsi berbeda dari COM Interop - Anda tidak memerlukan artefak perantara seperti majelis interop, Anda hanya /r
file .winmd, dan semua jenis dan anggota mereka dalam metadata-nya menjadi terlihat oleh Anda seolah-olah mereka adalah objek .NET. Perhatikan bahwa pustaka WinRT sendiri sepenuhnya asli (dan dengan demikian program C ++ asli yang menggunakan WinRT tidak memerlukan CLR sama sekali) - keajaiban untuk mengekspos semua hal yang dikelola di dalam CLR itu sendiri, dan levelnya cukup rendah. Jika Anda membuat program NET. Yang mereferensikan .winmd, Anda akan melihat bahwa itu benar-benar terlihat seperti referensi perakitan eksternal - tidak ada sulap tipu tangan seperti jenis embedding di sana.
Ini juga bukan pemetaan tumpul - CLR mencoba menyesuaikan tipe WinRT dengan padanannya, jika memungkinkan. Jadi misalnya GUID, tanggal dan URI menjadi System.Guid
, System.DateTime
dan System.Uri
, masing-masing; Antarmuka koleksi WinRT seperti IIterable<T>
dan IVector<T>
menjadi IEnumerable<T>
dan IList<T>
; dan seterusnya. Ini berlaku dua arah - jika Anda memiliki objek .NET yang mengimplementasikan IEnumerable<T>
, dan meneruskannya kembali ke WinRT, itu akan melihatnya sebagai IIterable<T>
.
Pada akhirnya, ini berarti bahwa aplikasi .NET Metro Anda mendapatkan akses ke subset dari perpustakaan .NET standar yang ada, dan juga ke pustaka WinRT (asli), beberapa di antaranya - khususnya Windows.UI
- terlihat sangat mirip dengan Silverlight, berdasarkan API. Anda masih memiliki XAML untuk mendefinisikan UI Anda, dan Anda masih berurusan dengan konsep dasar yang sama seperti di Silverlight - binding data, sumber daya, gaya, template dll. Dalam banyak kasus, dimungkinkan untuk mem-port aplikasi Silverlight hanya dengan using
ruang nama baru, dan men-tweak beberapa tempat dalam kode tempat API disesuaikan.
WinRT sendiri tidak ada hubungannya dengan HTML dan CSS, dan itu berhubungan dengan JavaScript hanya dalam arti bahwa itu juga diekspos di sana, mirip dengan bagaimana hal itu dilakukan untuk .NET. Anda tidak perlu berurusan dengan HTML / CSS / JS ketika Anda menggunakan pustaka WinRT UI di aplikasi .NET Metro Anda (well, saya kira, jika Anda benar-benar ingin, Anda dapat meng-host WebView
kontrol ...). Semua keterampilan .NET dan Silverlight Anda tetap sangat relevan dalam model pemrograman ini.