En düşük düzeyde, WinRT ABI düzeyinde tanımlanan bir nesne modelidir. Bir temel olarak COM kullanır (böylece her WinRT nesnesi uygular IUnknown
ve yeniden sayma yapar) ve oradan oluşturur. Çoğu doğrudan .NET'ten gelen eski COM ile karşılaştırıldığında oldukça fazla yeni kavram ekler - örneğin, WinRT nesne modelinin delegeleri vardır ve etkinlikler .NET tarzı yapılır (delegelerle ve abone ekle / kaldır yöntemler, etkinlik kaynakları ve lavabolar gibi eski COM modeli yerine). Dikkate değer diğer şeylerin yanı sıra WinRT'nin de parametreli ("jenerik") arayüzleri vardır.
Diğer bir büyük değişiklik, tüm WinRT bileşenlerinin, tıpkı .NET derlemeleri gibi meta verileri kullanabilmesidir. COM'da bunu tipelibler ile yapıyorsunuz, ancak her COM bileşeninde bunlara sahip değildiniz. WinRT için meta veriler .winmd dosyalarında bulunur - Geliştirici Önizlemesi'nde "C: \ Program Files (x86) \ Windows Kits \ 8.0 \ Windows Metada \" içine bakın. Etrafta konuşursanız, aslında kod içermeyen CLI meclisleri, sadece meta veri tabloları olduğunu göreceksiniz. Aslında onları ILDASM ile açabilirsiniz. Bu, WinRT'nin kendisinin yönetildiği anlamına gelmez - sadece dosya biçimini yeniden kullanır.
Sonra o nesne modeli açısından uygulanan bir dizi kütüphane vardır - WinRT arayüzlerini ve sınıflarını tanımlamak. Yine, orada ne olduğunu görmek için yukarıda belirtilen "Windows Meta Verileri" klasörüne bakın; ya da VS'de Object Browser'ı çalıştırın ve neyin kapsandığını görmek için çerçeve seçicide "Windows 8.0" ı seçin. Orada çok şey var ve tek başına UI ile ilgilenmiyor - Windows.Data.Json
veya Windows.Graphics.Printing
, veya gibi ad alanları da alıyorsunuz Windows.Networking.Sockets
.
Sonra özellikle UI ile ilgilenen birkaç kütüphane elde edersiniz - çoğunlukla bunlar Windows.UI
veya altında çeşitli ad alanları olacaktır Windows.UI.Xaml
. Birçoğu WPF / Silverlight ad alanlarına çok benziyor - örn Windows.UI.Xaml.Controls
. Yakından eşleşiyor System.Windows.Controls
; Windows.UI.Xaml.Documents
vb. için aynen
Artık .NET, WinRT bileşenlerini .NET derlemeleriymiş gibi doğrudan başvuruda bulunabilir. Bu, COM Interop'tan farklı çalışır - birlikte çalışma derlemeleri, yalnızca /r
bir .winmd dosyası gibi ara yapaylıklara ihtiyacınız yoktur ve meta verilerindeki tüm türler ve üyeleri .NET nesneleriymiş gibi görünür hale gelir. WinRT kitaplıklarının kendilerinin tamamen yerel olduğunu (ve WinRT kullanan yerel C ++ programlarının hiç CLR gerektirmediğini) unutmayın - yönetilen tüm bu şeyleri açığa çıkarmanın büyüsü CLR'nin içinde ve oldukça düşük seviyededir. Bir .winmd referans veren bir .NET programı ildasm, aslında bir extern montaj referansı gibi göreceksiniz - orada gömme türü gibi el hile çabukluğu yoktur.
Bu künt bir haritalama da değil - CLR, WinRT türlerini mümkünse eşdeğerlerine uyarlamaya çalışır. Yani mesela Guıd, tarihler ve URI'ler haline System.Guid
, System.DateTime
ve System.Uri
sırasıyla; Gibi WinRT toplama arayüzleri IIterable<T>
ve IVector<T>
olmak IEnumerable<T>
ve IList<T>
; ve bunun gibi. Bu her iki yöne de gider - uygulayan bir .NET nesneniz varsa IEnumerable<T>
ve onu WinRT'ye geri iletirseniz, onu olarak görür IIterable<T>
.
Sonuçta, bunun anlamı, .NET Metro uygulamalarınızın mevcut standart .NET kitaplıklarının bir alt kümesine ve ayrıca bazıları (özellikle) Windows.UI
Silverlight API'sine çok benzeyen (yerel) WinRT kitaplıklarına erişmesidir . Kullanıcı arayüzünüzü tanımlamak için hala XAML'niz var ve Silverlight'taki aynı temel kavramlarla ilgileniyorsunuz - veri bağlamaları, kaynaklar, stiller, şablonlar vb. Çoğu durumda, bir Silverlight uygulamasını sadece using
yeni ad alanlarıyla taşımak mümkündür , ve API'nın ayarlandığı kodda birkaç yerde ince ayar yapmak.
WinRT'nin kendisinin HTML ve CSS ile bir ilgisi yoktur ve JavaScript ile yalnızca .NET için nasıl yapıldığına benzer şekilde orada da bir anlam ifade eder. .NET Metro uygulamanızda WinRT UI kitaplıklarını kullandığınızda HTML / CSS / JS ile uğraşmanıza gerek yok (sanırım, gerçekten isterseniz, bir WebView
kontrol barındırabilirsiniz ...). Tüm .NET ve Silverlight becerileriniz bu programlama modelinde çok alakalı.