가장 낮은 수준에서 WinRT는 ABI 수준에서 정의 된 개체 모델입니다. COM을 기본으로 사용하므로 모든 WinRT 개체가 구현 IUnknown
및 재 계산을 수행합니다. 예를 들어, WinRT 객체 모델에는 델리게이트가 있고 이벤트는 .NET 스타일 (델리게이트 및 가입자 추가 / 제거)과 같이 수행됩니다. 이벤트 소스 및 싱크의 이전 COM 모델이 아니라 이벤트 당 하나씩). 다른 주목할만한 것들 중 WinRT는 또한 매개 변수화 된 ( "일반적인") 인터페이스를 가지고 있습니다.
또 하나의 큰 변화는 .NET 어셈블리와 마찬가지로 모든 WinRT 구성 요소에 메타 데이터를 사용할 수 있다는 것입니다. COM에서 당신은 일종의 typelibs를 가지고 있었지만 모든 COM 구성 요소가 그런 것은 아닙니다. WinRT의 경우 메타 데이터는 .winmd 파일에 포함되어 있습니다. 개발자 미리보기의 "C : \ Program Files (x86) \ Windows Kits \ 8.0 \ Windows Metadata \"내부를 확인하십시오. 주변을 둘러 보면 실제로 코드가없고 메타 데이터 테이블 만있는 CLI 어셈블리라는 것을 알 수 있습니다. 실제로 ILDASM으로 열 수 있습니다. 그렇다고 WinRT 자체가 관리되는 것은 아닙니다. 단순히 파일 형식 만 재사용합니다.
그런 다음 WinRT 인터페이스와 클래스를 정의하는 해당 객체 모델로 구현 된 많은 라이브러리가 있습니다. 다시, 위에서 언급 한 "Windows Metadata"폴더를보고 무엇이 있는지 확인하십시오. VS에서 Object Browser를 실행하고 프레임 워크 선택기에서 "Windows 8.0"을 선택하여 해당 항목을 확인하십시오. 거기에는 많은 것이 있으며 UI 만 다루지 않습니다 . Windows.Data.Json
또는 Windows.Graphics.Printing
, 또는 , 또는 같은 네임 스페이스도 얻습니다 Windows.Networking.Sockets
.
그런 다음 UI를 다루는 여러 라이브러리를 얻습니다. 주로 Windows.UI
또는 아래에 다양한 네임 스페이스가 있습니다 Windows.UI.Xaml
. 그들 중 많은 WPF / 실버 네임 스페이스와 매우 유사하다 - 예를 들면 Windows.UI.Xaml.Controls
밀접하게 일치한다 System.Windows.Controls
; Windows.UI.Xaml.Documents
등을 위한 ditto
이제 .NET은 WinRT 구성 요소를 마치 .NET 어셈블리 인 것처럼 직접 참조 할 수 있습니다. COM Interop과는 다르게 작동합니다. interop 어셈블리와 같은 중간 아티팩트가 필요하지 않으며 /r
.winmd 파일 만 있으며 메타 데이터의 모든 유형과 해당 멤버는 마치 .NET 개체 인 것처럼 보입니다. WinRT 라이브러리 자체는 완전히 고유합니다 (따라서 WinRT를 사용하는 기본 C ++ 프로그램에는 CLR이 전혀 필요하지 않음). 관리되는 모든 항목을 CLR 자체에 노출시키는 마법은 상당히 낮습니다. .winmd를 참조하는 .NET 프로그램을 사용하는 경우 실제로는 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
API 방식의 Silverlight와 매우 유사합니다. 여전히 UI를 정의 할 XAML이 있으며 데이터 바인딩, 리소스, 스타일, 템플릿 등 Silverlight와 동일한 기본 개념을 처리합니다. 대부분의 경우 using
새로운 네임 스페이스를 통해 Silverlight 앱을 이식 할 수 있습니다. API가 조정 된 코드에서 몇 군데를 조정했습니다.
WinRT 자체는 HTML 및 CSS와 관련이 없으며 .NET에서 수행되는 방식과 유사하게 JavaScript 와도 관련이 있다는 의미에서만 JavaScript와 관련이 있습니다. .NET Metro 앱에서 WinRT UI 라이브러리를 사용할 때 HTML / CSS / JS를 처리 할 필요가 없습니다 (정말 원한다면 WebView
컨트롤을 호스팅 할 수 있습니다 ). 모든 .NET 및 Silverlight 기술은이 프로그래밍 모델과 관련이 있습니다.