2016-02-08 29 views
0

我已經習慣了在.NET代碼,但我有點新的WinRT和有幾個問題:關於.NET和WinRT的

  1. 當我創建在C#中使用WinRT的地鐵窗口商店應用和.net的Windows應用程序的子集,這是一個託管的應用程序? (由clr託管?)還是不受管理,.net部分僅映射到winRT。
  2. 會發生什麼事時,有來自像C++非託管語言編寫的C#windowsRT組件的引用?它使用CLR還是100%原生?

回答

1

這是一個託管的應用程序?

WinRT應用程序作爲進程外COM服務器運行。您使用的大部分代碼都是非託管的,例如您在XAML中使用的任何內容都是用C++編寫的。但是這是一個很難看到的實現細節,它已經被CLR中內置的語言投影仔細包裝了。這使得WinRT的所有互操作性看起來像託管類。與您可以添加對COM組件的引用的方式不同,它看起來也像託管代碼一樣。

從實際出發,你可以打電話給你的應用程序託管的應用程序,你將使用託管調試修正錯誤。

它利用CLR還是100%原生?

機C++是100%的天然。相反,如果你在C#中編寫WinRT組件並將其用於C++或Javascript應用程序,那麼這些應用程序不知道你是用C#編寫代碼的。在它下面是COM,這是微軟用來允許不同語言相互交流的通用粘合劑。 CLR獲得互操作性的照顧,如果你寫的加載項的Office應用程序或使用的Microsoft.Office.Interop.Excel Excel自動運行就像它。

注意一個.winmd文件是如何關鍵彌補缺口,一個COM類型庫或.NET的元數據,告訴編譯器什麼的界面看起來像一個語言無關的方式完全等效。在一些限制,當你寫你自己的WinRT組件中還可以看到,你的類必須密封,因爲COM不支持實現繼承。而且不能通用。你可以公開一個DateTimeOffset而不是DateTime等等。