Ở cấp độ thấp nhất, WinRT là một mô hình đối tượng được xác định ở cấp độ ABI. Nó sử dụng COM làm cơ sở (vì vậy mọi đối tượng WinRT đều thực hiện IUnknown
và thực hiện đếm lại) và xây dựng từ đó. Nó bổ sung khá nhiều khái niệm mới so với COM cũ, hầu hết trong số đó đến trực tiếp từ .NET - ví dụ, mô hình đối tượng WinRT có các đại biểu và các sự kiện được thực hiện theo kiểu .NET (với các đại biểu và thêm / xóa thuê bao phương thức, một cho mỗi sự kiện) chứ không phải mô hình COM cũ của nguồn và sự kiện chìm. Trong số những điều đáng chú ý khác, WinRT cũng có giao diện ("chung").
Một thay đổi lớn khác là tất cả các thành phần WinRT đều có sẵn siêu dữ liệu cho chúng, giống như các cụm .NET. Trong COM, bạn có thể sử dụng typelibs, nhưng không phải thành phần COM nào cũng có chúng. Đối với WinRT, siêu dữ liệu được chứa trong các tệp .winmd - hãy xem bên trong "C: \ Program Files (x86) \ Windows Kits \ 8.0 \ Windows Metadata \" trong Bản xem trước dành cho nhà phát triển. Nếu bạn chọc ngoáy, bạn sẽ thấy rằng chúng thực sự là các cụm CLI không có mã, chỉ là các bảng siêu dữ liệu. Thực tế, bạn có thể mở chúng bằng ILDASM. Lưu ý, điều này không có nghĩa là chính WinRT được quản lý - nó chỉ đơn giản là sử dụng lại định dạng tệp.
Sau đó, có một số thư viện được triển khai theo mô hình đối tượng đó - xác định các giao diện và lớp WinRT. Một lần nữa, hãy xem thư mục "Siêu dữ liệu Windows" được đề cập ở trên để xem những gì ở đó; hoặc chỉ cần kích hoạt Trình duyệt đối tượng trong VS và chọn "Windows 8.0" trong bộ chọn khung, để xem những gì được bảo hiểm. Có rất nhiều ở đó, và nó không giải quyết một mình với UI - bạn cũng có được các không gian tên như Windows.Data.Json
, hoặc Windows.Graphics.Printing
, hoặc Windows.Networking.Sockets
.
Sau đó, bạn nhận được một số thư viện, giao dịch cụ thể với UI - chủ yếu là các không gian tên khác nhau trong Windows.UI
hoặc Windows.UI.Xaml
. Rất nhiều trong số chúng rất giống với không gian tên WPF / Silverlight - ví dụ như Windows.UI.Xaml.Controls
được kết hợp chặt chẽ System.Windows.Controls
; ditto cho Windows.UI.Xaml.Documents
vv
Bây giờ, .NET có khả năng tham chiếu trực tiếp các thành phần WinRT như thể chúng là các cụm .NET. Điều này hoạt động khác với COM Interop - bạn không cần bất kỳ tạo phẩm trung gian nào, chẳng hạn như tập hợp interop, bạn chỉ cần /r
một tệp .winmd và tất cả các loại và các thành viên của chúng trong siêu dữ liệu của nó sẽ hiển thị với bạn như thể chúng là các đối tượng .NET. Lưu ý rằng bản thân các thư viện WinRT là bản địa hoàn toàn (và vì vậy các chương trình C ++ bản địa sử dụng WinRT hoàn toàn không yêu cầu CLR) - phép thuật phơi bày tất cả những thứ được quản lý nằm trong chính CLR và ở mức khá thấp. Nếu bạn cài đặt chương trình .NET tham chiếu đến .winmd, bạn sẽ thấy rằng nó thực sự trông giống như một tài liệu tham khảo lắp ráp bên ngoài - không có trò lừa bịp nào như kiểu nhúng ở đó.
Đây cũng không phải là một ánh xạ cùn - CLR cố gắng điều chỉnh các loại WinRT thành tương đương với chúng, nếu có thể. Vì vậy, ví dụ GUID, ngày và URI trở thành System.Guid
, System.DateTime
và System.Uri
, tương ứng; Các giao diện thu thập WinRT như IIterable<T>
và IVector<T>
trở thành IEnumerable<T>
và IList<T>
; và như thế. Điều này diễn ra theo cả hai cách - nếu bạn có một đối tượng .NET thực hiện IEnumerable<T>
và chuyển nó trở lại WinRT, nó sẽ thấy nó như là IIterable<T>
.
Cuối cùng, điều này có nghĩa là các ứng dụng .NET Metro của bạn có quyền truy cập vào một tập hợp con của các thư viện .NET tiêu chuẩn hiện có và cả các thư viện WinRT (bản địa), một số trong đó - đặc biệt Windows.UI
- trông rất giống với Silverlight, API-khôn ngoan. Bạn vẫn có XAML để xác định giao diện người dùng của mình và bạn vẫn xử lý các khái niệm cơ bản giống như trong Silverlight - ràng buộc dữ liệu, tài nguyên, kiểu, mẫu, v.v. Trong nhiều trường hợp, có thể chuyển ứng dụng Silverlight chỉ bằng using
các không gian tên mới, và điều chỉnh một vài vị trí trong mã nơi API được điều chỉnh.
Bản thân WinRT không liên quan gì đến HTML và CSS và nó chỉ liên quan đến JavaScript theo nghĩa là nó cũng được hiển thị ở đó, tương tự như cách nó được thực hiện cho .NET. Bạn không cần phải xử lý HTML / CSS / JS khi bạn sử dụng các thư viện UI WinRT trong ứng dụng .NET Metro của mình (vâng, tôi đoán, nếu bạn thực sự muốn, bạn có thể lưu trữ một WebView
điều khiển ...). Tất cả các kỹ năng .NET và Silverlight của bạn vẫn có liên quan rất nhiều trong mô hình lập trình này.