निम्नतम स्तर पर, WinRT ABI स्तर पर परिभाषित एक वस्तु मॉडल है। यह COM को आधार के रूप में उपयोग करता है (इसलिए हर WinRT ऑब्जेक्ट IUnknown
इम्प्लीमेंट करता है और रीफोकाउंटिंग करता है), और वहां से बनाता है। यह पुराने के COM की तुलना में काफी नई अवधारणाएं जोड़ता है, जिनमें से अधिकांश सीधे .NET से आते हैं - उदाहरण के लिए, WinRT ऑब्जेक्ट मॉडल में डेलिगेट्स हैं, और ईवेंट .NET.- स्टाइल (डेलिगेट्स के साथ और सब्सक्राइबर जोड़ने / हटाने) किए जाते हैं ईवेंट स्रोतों के पुराने COM मॉडल और सिंक के बजाय विधियाँ, प्रति घटना)। अन्य उल्लेखनीय चीजों में से, WinRT में पैराट्राइज्ड ("जेनेरिक") इंटरफेस भी हैं।
एक अन्य बड़ा बदलाव यह है कि सभी WinRT घटकों के लिए मेटाडेटा उपलब्ध है, जैसे .NET असेंबली। COM में आपको थोड़े थोड़े टाइप करने वाले के साथ था, लेकिन हर COM घटक के पास नहीं था। WinRT के लिए, मेटाडेटा .winmd फ़ाइलों में समाहित है - डेवलपर पूर्वावलोकन में "C: \ Program Files (x86) \ Windows Kits \ 8.0 \ Windows मेटाडेटा \" देखें। यदि आप चारों ओर प्रहार करते हैं, तो आप देखेंगे कि वे वास्तव में सीएलआई असेंबलियाँ हैं जिनमें कोई कोड नहीं है, बस मेटाडेटा टेबल हैं। आप उन्हें ILDASM के साथ खोल सकते हैं, वास्तव में। ध्यान दें, इसका मतलब यह नहीं है कि WinRT को स्वयं प्रबंधित किया जाता है - यह फ़ाइल प्रारूप को पुन: उपयोग करता है।
फिर उस ऑब्जेक्ट मॉडल के संदर्भ में कई पुस्तकालय कार्यान्वित किए जाते हैं - WinRT इंटरफेस और कक्षाओं को परिभाषित करना। फिर से, "विंडोज मेटाडेटा" फ़ोल्डर को ऊपर देखें जो कि वहां है; या वी.एस. में ऑब्जेक्ट ब्राउज़र को आग लगा दें और फ्रेमवर्क चयनकर्ता में "विंडोज 8.0" का चयन करें, यह देखने के लिए कि क्या कवर किया गया है। वहाँ बहुत कुछ है, और यह अकेले यूआई के साथ सौदा नहीं करता है - आपको नामस्थान भी मिलते हैं जैसे Windows.Data.Json
, या Windows.Graphics.Printing
, या Windows.Networking.Sockets
।
फिर आपको कई पुस्तकालय मिलते हैं, जो विशेष रूप से यूआई के साथ काम कर रहे हैं - ज्यादातर ये विभिन्न नामस्थान के तहत Windows.UI
या होंगे Windows.UI.Xaml
। उनमें से बहुत सारे WPF / सिल्वरलाइट नामस्थानों के समान हैं - जैसे Windows.UI.Xaml.Controls
बारीकी से मेल खाना System.Windows.Controls
; Windows.UI.Xaml.Documents
आदि के लिए डिट्टो
अब, .NET के पास सीधे WinRT घटकों को संदर्भित करने की क्षमता है जैसे कि वे .NET असेंबली थे। यह COM इंटरॉप से अलग तरीके से काम करता है - आपको किसी भी मध्यवर्ती कलाकृतियों जैसे कि इंटरॉप असेंबली, आपको सिर्फ /r
.winmd फ़ाइल की आवश्यकता नहीं है, और इसके मेटाडेटा में सभी प्रकार और उनके सदस्य आपके लिए दृश्यमान हो जाते हैं जैसे कि वे .NET ऑब्जेक्ट थे। ध्यान दें कि WinRT पुस्तकालय स्वयं पूरी तरह से मूल (और इसलिए मूल C ++ प्रोग्राम है जो WinRT का उपयोग करते हैं, CLR की आवश्यकता बिल्कुल नहीं होती है) - प्रबंधित किए गए सभी सामानों को उजागर करने का जादू सीएलआर के अंदर ही है, और काफी निम्न स्तर है। यदि आप एक। NET प्रोग्राम का उपयोग करते हैं, जो .winmd का संदर्भ देता है, तो आप देखेंगे कि यह वास्तव में एक बाहरी असेंबली संदर्भ की तरह दिखता है - वहाँ पर हाथ से छेड़छाड़ करने वालों की कोई नींद नहीं है, जैसे कि वहाँ एम्बेडिंग।
यह एक कुंद मानचित्रण नहीं है, या तो - 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 मेट्रो ऐप्स को मौजूदा मानक .NET पुस्तकालयों के सबसेट तक पहुँच मिलती है, और (देशी) WinRT लाइब्रेरीज़ को भी, जिनमें से कुछ - विशेष रूप से Windows.UI
- सिल्वरलाइट, एपीआई-वार के समान दिखती हैं। आपके पास अभी भी अपने UI को परिभाषित करने के लिए XAML है, और आप अभी भी उसी मूल अवधारणाओं से निपटते हैं जैसे कि Silverlight - डेटा बाइंडिंग, संसाधन, शैली, टेम्पलेट आदि। कई मामलों में, using
नए नामस्थानों द्वारा बस एक Silverlight ऐप को पोर्ट करना संभव है , और एपीआई कोड समायोजित किया गया था, जहां कोड में कुछ स्थानों tweaking।
WinRT का स्वयं HTML और CSS से कोई लेना-देना नहीं है, और यह केवल जावास्क्रिप्ट के संबंध में इस अर्थ में है कि यह वहाँ भी उजागर है, यह .NET के लिए कैसे किया जाता है। जब आप अपने .NET मेट्रो ऐप में WinRT UI पुस्तकालयों का उपयोग करते हैं, तो आपको HTML / CSS / JS से निपटने की आवश्यकता नहीं है (ठीक है, मुझे लगता है, यदि आप वास्तव में चाहते हैं, तो आप एक WebView
नियंत्रण की मेजबानी कर सकते हैं ...)। आपके सभी .NET और सिल्वरलाइट स्किल इस प्रोग्रामिंग मॉडल में बहुत अधिक प्रासंगिक हैं।