.NET平台開發Windows Phone 7、iPhone及Android應用

來源:互聯網
上載者:User

編者按:在Windows Phone 7發布之後,移動開發領域除iPhone和Android之外季軍即
將明朗,越來越多的開發人員開始向Windows Phone
7平台轉移。本文為著名開發人員趙劼為InfoQ撰寫的一篇文章,詳實記錄了在近日舉辦的Modern .NET DDD
Conference會議上,著名開發人員Chris Hardy在他的演講中展示了如何基於.NET/C#,開發面向Windows Phone
7,iPhone及Android三個平台的應用程式,以及其中的注意事項。

首先Chris列舉了三個平台上使用的工具及架構等周邊環境:

  Windows Phone 7 iPhone(MonoTouch) Android(MonoDroid預覽版)
作業系統 Windows Mac 跨平台
開發工具 Visual Studio 2010 MonoDevelop VS 2010 / MonoDevelop
設計工具 Expression Blend 4 Interface Builder XML檔案 / DroidDraw
開發架構 Silverlight for WP Silverlight 3的超集 Silverlight 3的超集
社區情況 極好 較好 尚早


iPhone VS Windows Phone 7 VS Android

MonoTouch是Novell公司推出的基於Mono的iPhone
OS應用程式開發套件,並可以將應用程式發布至蘋果應用程式商店。Mono是一款基於ECMA標準開發的.NET運行環境,使用JIT(Just-in-
Time)編譯方式來執行IL代碼,不過由於iPhone
OS裝置的限制,MonoTouch使用了AOT(Ahead-of-Time)編譯方式,直接將原生代碼部署至iPhone
OS裝置(iPhone,iPhone
4,iPad)上。MonoTouch還提供了一個Linker,它會將SDK及程式碼中真正使用到的部分靜態連結至應用程式中,從而削減了應用程式的
體積。使用MonoTouch開發出來的應用程式可以在iPhone
OS裝置上獨立運行,這是因為MonoTouch會將一個運行時放入應用程式內部的原因。據Chris稱,這會給應用程式的體積帶來大約6MB的增長。

使用MonoTouch,.NET/C#程式員可以利用現有的知識進行開發,能夠使用反射、泛型、LINQ、Lambda等各種進階的.NET
/C#特性。面向原生API的綁定存放在monotouch.dll中的MonoTouch命名空間下,並與CocoaTouch(即用於iPhone
OS開發的原生Objective-C架構)的命名空間映射。在綁定時,MonoTouch不是一味地直接暴露出Cocoa
Touch的功能,而是在一定程度上將它的API改寫為更傾向於.NET程式員的形式。例如UIView的Frame屬性為
System.Drawing.RectangleF類型,而不是Cocoa
Touch中原本使用的CGRect。對於一些如NSArray這樣的類型,MonoTouch也在合適的地方將其轉化為強型別的數組。在調試方
面,MonoTouch使用了Mono的Soft-Debugger,支援在模擬器、真機,甚至通過WIFI進行調試。

MonoDroid是針對Android系統的應用程式開發套件,大體和MonoTouch相同,目前正處在預覽發布階段,只有少量早期預訂的使用者拿到了SDK。

據Chris稱,有了MonoTouch和MonoDroid便可以複用相當部分的代碼,包括現有的開源項目,如Json.NET、
FlickrNet及XnaTouch。XnaTouch是一款基於MonoTouch的XNA架構實現,簡化XBox及Windows Phone
7上的遊戲向iPhone OS上的移植工作。不過在複用時並不能共用二進位檔案,而必須針對不同的平台重新編譯代碼。

在UI部分,三個平台各有原生的解決方案。除了Windows Phone
7以外,iPhone和Android分別使用MonoTouch及MonoDroid提供的原生API的C#綁定進行開發。例如,MonoTouch進
行UI開發時使用的是iPhone OS標準的應用程式的架構,包括其MVC驅動方式。開發人員可以通過Interface
Builder編輯XIB檔案,MonoTouch會自動根據XIB的內容在局部類中產生C#代碼,所有的outlet,action等元素都會在代碼中
得到體現。

Chris也提到了其他一些必須針對平台編寫特定代碼的地方,例如在檔案的儲存上,MonoTouch和MonoDroid可以直接像本地路徑寫入資料,而在Windows Phone 7上則必須使用隔離儲存區 (Isolated Storage):

  1.     void SaveLocal(string data)  
  2.     {  
  3. #if (MonoTouch || MonoDroid)  
  4.         File.WriteAllText(_localPath, data);  
  5. #elif WINDOWS_PHONE  
  6.         using (var appStorage =   
  7.             IsolatedStorageFile.GetUserStoreForApplication())  
  8.         {  
  9.             var file = appStorage.OpenFile(_localPath, FileMode.Create);  
  10.             FileExtension.WriteAllText(file, data);  
  11.         }  
  12. #endif  
  13.     }  
  14.  

同理,使用WebClient擷取資料時,在MonoTouch及MonoDroid上可以直接調用DownloadFile相關方法來下載檔案,而在Windows Phone 7中,則需要使用OpenRead相關方法處理位元據流。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.