ที่ระดับต่ำสุด WinRT เป็นแบบจำลองวัตถุที่กำหนดไว้ในระดับ ABI มันใช้ COM เป็นฐาน (เพื่อให้วัตถุ WinRT ทุกเครื่องใช้IUnknown
และทำการคำนวณใหม่) และสร้างจากที่นั่น มันเพิ่มแนวความคิดใหม่ ๆ จำนวนมากเมื่อเปรียบเทียบกับ COM ของเก่าซึ่งส่วนใหญ่มาจาก. NET โดยตรงตัวอย่างเช่นรูปแบบวัตถุ WinRT มีผู้รับมอบสิทธิ์และเหตุการณ์จะเสร็จสิ้นในรูปแบบ. NET (พร้อมตัวแทนและเพิ่ม / ลบสมาชิก วิธีการหนึ่งรายการต่อเหตุการณ์) แทนที่จะเป็น COM รุ่นเก่าของแหล่งเหตุการณ์และอ่างล้างมือ สิ่งที่น่าสังเกตอื่น ๆ WinRT ยังมีส่วนต่อประสาน ("ทั่วไป") อีกด้วย
การเปลี่ยนแปลงที่สำคัญอีกประการหนึ่งคือส่วนประกอบ WinRT ทั้งหมดมีข้อมูลเมตาสำหรับพวกเขาเช่นเดียวกับชุดประกอบ. NET ใน COM คุณ kinda sorta มีสิ่งนั้นกับ typelibs แต่ไม่ใช่ว่าทุกองค์ประกอบของ COM มีพวกเขา สำหรับ WinRT ข้อมูลเมตาจะอยู่ในไฟล์. winmd - ดูที่ "C: \ Program Files (x86) \ Windows Kits \ 8.0 \ Windows Metadata \" ในตัวอย่างผู้พัฒนา หากคุณแหย่ไปรอบ ๆ คุณจะเห็นว่าพวกเขาเป็นจริงประกอบ CLI ไม่มีรหัสเพียงตารางเม คุณสามารถเปิดได้ด้วย ILDASM อันที่จริง โปรดทราบว่านี่ไม่ได้หมายความว่า WinRT จะได้รับการจัดการ แต่เพียงแค่นำรูปแบบไฟล์กลับมาใช้ใหม่
จากนั้นก็มีห้องสมุดจำนวนหนึ่งที่นำไปใช้ในแง่ของรูปแบบวัตถุนั้นซึ่งกำหนดอินเทอร์เฟซและคลาส WinRT ดูที่โฟลเดอร์ "Windows Metadata" อีกครั้งเพื่อดูว่ามีอะไรอยู่ หรือเพียงแค่เรียกใช้ Object Browser ใน VS และเลือก "Windows 8.0" ในตัวเลือกเฟรมเวิร์กเพื่อดูสิ่งที่ครอบคลุม มีจำนวนมากอยู่ที่นั่นและมันก็ไม่ได้จัดการกับ UI คนเดียว - คุณยังได้รับ namespaces เช่นWindows.Data.Json
หรือหรือWindows.Graphics.Printing
Windows.Networking.Sockets
จากนั้นคุณจะได้รับห้องสมุดหลายอย่างซึ่งถูกโดยเฉพาะการจัดการกับ UI - ส่วนใหญ่เหล่านี้จะเป็น namespaces ต่างๆภายใต้หรือWindows.UI
Windows.UI.Xaml
มากของพวกเขามีความคล้ายกับ namespaces WPF / Silverlight - เช่นWindows.UI.Xaml.Controls
คือการจับคู่อย่างใกล้ชิดSystem.Windows.Controls
; เหมือนกันWindows.UI.Xaml.Documents
เป็นต้น
ตอนนี้. NET มีความสามารถในการอ้างอิงองค์ประกอบ WinRT โดยตรงราวกับว่าพวกเขาเป็น. NET ประกอบ สิ่งนี้ทำงานแตกต่างจาก COM Interop - คุณไม่จำเป็นต้องใช้สิ่งประดิษฐ์ขั้นกลางใด ๆ เช่นแอสเซมบลี interop คุณเพียงแค่/r
ไฟล์. winmd และทุกประเภทและสมาชิกในเมตาดาต้าจะปรากฏให้คุณเห็นราวกับว่าพวกเขาเป็นวัตถุ. NET โปรดทราบว่าห้องสมุด WinRT นั้นเป็นเจ้าของภาษาอย่างสมบูรณ์ (และโปรแกรมภาษา C ++ ดั้งเดิมที่ใช้ WinRT ไม่จำเป็นต้องใช้ CLR เลย) - ความมหัศจรรย์ที่จะเปิดเผยสิ่งต่าง ๆ ทั้งหมดตามที่มีการจัดการอยู่ภายใน CLR และอยู่ในระดับค่อนข้างต่ำ หากคุณเป็น. NET โปรแกรม. NET ที่อ้างอิง. winmd คุณจะเห็นว่ามันดูเหมือนการอ้างอิงแอสเซมบลีภายนอก - ไม่มีการใช้กลอุบายมือเช่นประเภทการฝังที่นั่น
มันไม่ได้เป็นการทำแผนที่ทื่อเช่นกัน - CLR พยายามปรับประเภท WinRT ให้เทียบเท่ากับที่เป็นไปได้ ดังนั้น guid ของเช่นวันที่และยูริสกลายเป็น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
ดูเหมือน Silverlight, API ที่ฉลาด คุณยังมี XAML เพื่อกำหนด UI ของคุณและคุณยังคงจัดการกับแนวคิดพื้นฐานเช่นเดียวกับใน Silverlight - การเชื่อมโยงข้อมูลทรัพยากรสไตล์แม่แบบและอื่น ๆ ในหลาย ๆ กรณีมันเป็นไปได้ที่จะพอร์ตแอป Silverlight เพียงแค่using
namespaces ใหม่ และปรับแต่งโค้ดสองสามตำแหน่งที่มีการปรับ API
WinRT เองไม่มีส่วนเกี่ยวข้องกับ HTML และ CSS และมีความสัมพันธ์กับ JavaScript เฉพาะในแง่ที่ว่ามีการเปิดเผยเช่นเดียวกันกับวิธีที่ใช้กับ. NET คุณไม่จำเป็นต้องจัดการกับ HTML / CSS / JS เมื่อคุณใช้ไลบรารี WinRT UI ในแอป. NET Metro ของคุณ (ถ้าอย่างนั้นฉันว่าถ้าคุณต้องการจริงๆคุณสามารถโฮสต์การWebView
ควบคุม ... ) ทักษะ. NET และ Silverlight ของคุณยังคงมีความเกี่ยวข้องอย่างมากในรูปแบบการเขียนโปรแกรมนี้