成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

微軟MVP推薦:WP7上的IronRuby開發

移動開發
本文的作者是一位微軟Visual C#/IronRuby MVP,也是《IronRuby Unleashed》一書的作者。他向我們推薦了一種無論對于.NET Framework開發人員還是Ruby開發人員都很重要的開發平臺,那就是在 Windows Phone 7 上使用 IronRuby。

前不久,我們曾給大家推薦過如何使用IronRuby開發Windows Phone 7應用程序這篇文章,今天繼續給大家介紹一篇IronRuby如何開發Windows Phone 7的文章,希望讀者能從中得到啟發。

以下為轉發的全文

幾年前,我是一個不折不扣的.NET迷。 我對其他的開發領域毫無興趣,整個人都沉醉于自己的封閉世界中。 隨后,我又誤打誤撞地學習了 Ruby,那種體驗簡直不可思議。 那種利用語言的內置功能來完成工作的方式深深地吸引了我。

還有的就是,您可以讓一個人領略 .NET 世界外部的事物,但.NET 將永遠深深地扎根在那個人的心里。 因此,當我一聽說微軟 要在Microsoft .NET Framework 上開發一種名為IronRuby的Ruby語言的實現時,心里十分激動,然后便一頭鉆了進去。

現在,有了 IronRuby,.NET 世界和 Ruby 世界之間就架起了一座彼此連接的橋梁。 這可以使無限種新可能變為現實,這種連接的好處超乎想象。

在本文中,我將向您介紹其中一種無論對于 .NET Framework 開發人員還是Ruby開發人員都很重要的好處,那就是您可以在Windows Phone 7 上使用IronRuby。

什么是IronRuby?

2006 年,微軟宣布開發IronRuby。 經過三年多的開發,IronRuby 團隊終于在四月份宣布IronRuby 的第一個穩定版本(1.0 版)正式面市。

IronRuby 支持 Ruby 語言的完整功能集,唯一增加的功能是:Ruby 代碼與 .NET Framework 代碼之間的集成。 該集成是完全無縫的,唯一需要做的就是將 .NET Framework 程序集加載到 Ruby 上下文中。 例如,下面這段 IronRuby 代碼首先加載 System.Windows.Forms 程序集,然后再利用其類:

  1.           require 'System.Windows.Forms' 
  2.  
  3. include System::Windows::Forms  
  4.  
  5. form = Form.  
  6.           new 
  7. form.height = 200  
  8. form.width = 400  
  9. form.text = "IronRuby Window" 
  10. form.show_dialog 

能夠實現該集成可能要歸功于動態語言運行時 (DLR),這是一個添加到 .NET Framework 基礎結構中的層,用于為在該框架上編寫的動態語言提供公共服務。 DLR 是在 CLR 基礎上編寫而成的,可以使在 .NET 上實現動態語言變得更加容易。 這是最近我們看到 .NET Framework 動態語言(包括 IronRuby、IronPython、IronJS、Nua、ClojureCLR 等等)不斷興起的主要原因之一。

IronRuby 的主要功能

Ruby 是一種動態語言,IronRuby 也是如此。 這就是說,在沒有編譯器的情況下,對于靜態語言中在編譯和生成期間完成的大多數操作,在運行時都能夠完成。 這種行為可以提供當前大多數靜態語言中難以或不可能實現的各種功能。

與 .NET Framework 對象的互操作性。Ruby 語言包含多種實現:MRI(即最初的實現)、Jruby、Rubinius、MacRub、IronRuby 等等。 IronRuby 之所以能夠脫穎而出,要歸功于其能夠與 .NET Framework 對象方便地進行交互。 這種互操作性是雙向的,即 .NET Framework 對象可以在 IronRuby 代碼中使用,IronRuby 對象也可以在 .NET Framework 代碼中使用。

動態類型化。IronRuby 變量類型可以在運行時計算得出,因此無需在代碼中指定變量的類型。 但是,這并不表示 IronRuby 沒有類型。 IronRuby 包含類型,而且和靜態語言中的類型一樣,每種類型都有其各自的規則。 以下代碼示例用幾個簡單的步驟說明了動態類型化機制:

  1.       # Declaring a numeric variable  
  2. a = 1  
  3.  
  4. # The variable is of a numeric type   
  5. # and therefore numeric operations are available  
  6. a = a * 2 + 8 / 4  
  7.  
  8. # The next line will raise an exception  
  9. # because it is not possible to add a string to a number  
  10. a = a + "hello" 
  11.  
  12. # However, the next line is entirely legit and will result  
  13. # in changing the variable type to String  
  14. a = "Hello" 

交互式控制臺。與 Windows 命令提示符類似,交互式控制臺也是一種可以檢索 IronRuby 代碼并立即執行該代碼的應用程序。 這種執行流也稱為讀取-求值-輸出-循環 (REPL)。 您可以定義變量、方法甚至類,加載 IronRuby 文件或 .NET Framework 程序集,并立即使用它們。 例如,圖 1 中顯示一個簡單的控制臺會話,該會話中創建了一個類并立即使用該類。

使用 IronRuby 控制臺

鴨子類型化。IronRuby 是一種面向對象的語言。 正如大家在面向對象的語言中所期待的那樣,IronRuby 支持類、繼承、封裝和訪問控制。 但是,與許多靜態語言一樣,它不支持接口和抽象類。

不過,這并不是該語言的設計缺陷。 有了動態類型化功能,聲明接口或抽象類之類的代碼約定顯得多此一舉。 唯一與對象有關的事項是是否定義了特定的方法;如果已定義,則無需進行標記。 這就是通常所說的鴨子類型化 - 如果某個類型的叫聲像鴨子,游泳姿勢也像鴨子,那么它就是一只鴨子,無需進行標記即可將其視為一只鴨子。

例如,下面的代碼示例包含兩個類,這些類包含一個名為 say_hi 的方法以及另一個名為 introduce 的常規方法,后者可以檢索一個對象并執行其 say_hi 方法。(請注意,這里不存在接口或其他標記機制。)

  1.           class Human  
  2.   def say_hi  
  3.     puts "Hi!" 
  4.   end 
  5. end 
  6. class Duck  
  7.   def say_hi  
  8.     puts "Quack!" 
  9.   end 
  10. end 
  11.  
  12. def introduce(obj)  
  13.   obj.say_hi  
  14. end 
  15.  
  16. human = Human.  
  17.           new 
  18. duck = Duck.  
  19.           new 
  20.  
  21. introduce(human) # prints "Hi!"  
  22. introduce(duck) # prints "Quack!" 

元編程。IronRuby 提供了強大的元編程功能。 元編程是一種可在運行時添加、更改甚至刪除方法的方式。 例如,可以向類中添加方法、寫入定義其他方法的方法或刪除現有類中的方法定義。 下面的代碼的類中添加了一個方法,添加的方法將反映到該類的所有當前實例和將來實例中。

  1.           # Creating a class with no methods  
  2. class Demo  
  3. end 
  4.  
  5. # Creating an instance of class Demo  
  6. d = Demo.  
  7.           new 
  8.  
  9. # Opening the class and adding a new method - hello_world  
  10. class Demo  
  11.   def hello_world  
  12.     puts "hello world" 
  13.   end 
  14. end 
  15.  
  16. # Using the newly added method on the class instance  
  17. d.hello_world # prints "hello world" 

此外,還有一些特殊的方法可用于捕獲對未定義的方法或常量的調用。 使用這些方法可以輕松地支持 find_by_[列名稱] 之類的動態方法名稱,其中 [列名稱] 可以替換為 find_by_name、find_by_city 或 find_by_zipcode 之類的任何值。

RubyGems。Ruby 語言功能再強大,如果沒有可以與其一起安裝和使用的外部庫,也不會取得如此巨大的成功。

安裝 Ruby 庫的主要方法是通過 RubyGems 系統。 這是一種程序包管理器,可以幫助分發和安裝稱為 gem 的 Ruby 庫。 有數千種免費的 gem 可以使用,幾乎涵蓋了包括測試框架、稅率計算庫以及 Web 開發框架等在內的所有編程方面和任務。

您應該會注意到某些 RubyGems 依賴于 C 庫。 這些 gem 無法在當前版本的 IronRuby 上運行,除非將 C 庫移植到 Ruby 或 C# 平臺上。

社區。IronRuby 的其中一個最大好處就是您可以訪問 Ruby 社區。 該社區包含遍布于眾多論壇、郵件列表、聊天室和博客中的寶貴內容,這些內容是由許多樂于助人解決任何問題的用戶提供的。 不要猶豫,趕快利用這些資源吧,它們真的非常有用。

IronRuby 和 Silverlight

Silverlight 2 中引入了一項全新的重要功能:針對 DLR 語言的支持。 這樣一來,開發人員就可以將 IronRuby 用于 Silverlight 應用程序,既可以將它融入到應用程序中,也可以使用它來編寫整個 Silverlight 應用程序。

且慢,Silverlight 可以在 Windows Phone 7 上運行,對吧? 當然可以。

Windows Phone 7

Windows Phone 7

萬眾期待的 Windows Phone 7 是微軟的下一代移動平臺,它是智能手機行業的一項創新性突破。 除了標準的多點觸控功能和炫目的新 UI 之外,從開發人員的角度來看,Windows Phone 7 的最大新聞莫過于它是在 Silverlight 平臺上開發的。

正是歸功于微軟這一利用成熟技術的明智之舉,廣大開發人員只需輕松簡單地學習一下,就可以創建移動應用程序了。

由于 DLR 語言可以在 Silverlight 環境中運行,因此您可以充分利用 IronRuby,使用它來編寫 Windows Phone 7 應用程序。

不過,有一些限制需要注意。 Windows Phone 7 自帶的 .NET Compact Framework 是 .NET Framework 的子集。 Compact Framework 專為移動應用程序和嵌入式應用程序而設計,包含完整 .NET Framework 的大約 30% 功能。 因此,它缺失了許多類,這會影響 IronRuby 的運行。

Reflection.Emit 命名空間是影響 IronRuby 的主要缺失功能。 IronRuby 使用此功能來動態地編譯代碼,以使應用程序更快地運行。 但是,它只屬于性能上的優化,并不是運行簡單腳本和應用程序所必備的組件。

另一個限制與新 Windows Phone 7 應用程序的創建方式有關。 這類應用程序只能通過 Visual Studio 并使用 C# 來創建。 這一要求迫使開發人員不得不使用 C# 編寫代碼來初始化 IronRuby 代碼。

最后一個重要限制是 RubyGems 無法在 Windows Phone 7 上運行。 因此,要使用 gem,必須和任何其他 IronRuby 代碼文件一樣,先將其代碼文件包含在應用程序文件中,然后再使用這些文件。#p#

在 Windows Phone 7 上構建簡單的 IronRuby 應用程序

要開發 IronRuby 驅動的 Windows Phone 7 應用程序,需要先安裝 Windows Phone 7 開發人員工具,這些工具可從 developer.windowsphone.com 上進行下載。

安裝這些工具之后,請打開 Visual Studio,然后轉到“文件”|“新建”|“項目”。 在“新建項目”對話框中,選擇“Silverlight for Windows Phone”類別,然后選擇“Windows Phone 應用程序”項目模板。 為該項目命名,然后繼續操作。

新項目一打開,您就會看到已自動創建了一個簡單的 XAML 文件。 請注意,XAML 通常是 Silverlight 必需的,并不依賴于語言。 因此,即使應用程序代碼將使用 IronRuby 來編寫,也必須使用 XAML 來創建 UI。在這個簡單的應用程序中,默認的 XAML 文件已經夠用,因此這里無需做任何更改。

這個簡單的應用程序中,最值得關注的部分是代碼。 不過,在對此進行深入探討之前,我們需要添加對 IronRuby 和 DLR 程序集的引用。 這些程序集并不是常規的程序集,我們需要的是適用于 Windows Phone 7 的程序集,它們可以從 ironruby.codeplex.com/releases/view/43540#DownloadId=133276 上獲取。 可以在下載的程序包的 silverlight/bin 文件夾中找到所需的程序集。

接下來,我們需要編寫 IronRuby 代碼。 向應用程序中添加一個新的文本文件,然后將其命名為 MainPage.rb。 此外,為了便于部署到手機中,請打開此文件的屬性,然后將“生成操作”屬性更改為“嵌入的資源”。

接下來,將下面的代碼復制到該文件中。

  1.           # Include namespaces for ease of use  
  2. include System::Windows::Media  
  3. include System::Windows::Controls  
  4.  
  5. # Set the titles  
  6. Phone.find_name("ApplicationTitle").text = "MSDN Magazine" 
  7. Phone.find_name("PageTitle").text = "IronRuby& WP7" 
  8.  
  9. # Create a new text block  
  10. textBlock = TextBlock.  
  11.           new 
  12. textBlock.text = "IronRuby is running on Windows Phone 7!" 
  13. textBlock.foreground = SolidColorBrush.  
  14.           new(Colors.Green)  
  15. textBlock.font_size = 48  
  16. textBlock.text_wrapping = System::Windows::TextWrapping.Wrap  
  17.  
  18. # Add the text block to the page  
  19. Phone.find_name("ContentGrid").children.add(textBlock) 

以上IronRuby代碼非常簡單易懂;我們設置了標題,創建了一個文本塊,其中包含一些文本,并將其添加到頁面中。 請注意,您可以在上面提及的 Windows Phone 環境運行限制下,使用Ruby語言中的所有功能(這里就不演示了),例如類、元編程和庫。

現在,剩下的任務就是實際執行 IronRuby 代碼了。 要在應用程序加載時執行該代碼,請將下面的代碼添加到位于 MainPage.xaml.cs 文件內的 MainPage 類構造函數中。

下面代碼以通過類構造函數執行 IronRuby 代碼

  1.           // Allow both portrait and landscape orientations  
  2. SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;  
  3.  
  4. // Create an IronRuby engine and prevent compilation  
  5. ScriptEngine engine = Ruby.CreateEngine();  
  6.  
  7. // Load the System.Windows.Media assembly to the IronRuby context  
  8. engine.Runtime.LoadAssembly(typeof(Color).Assembly);  
  9.  
  10. // Add a global constant named Phone, which will allow access to this class  
  11. engine.Runtime.Globals.SetVariable("Phone", this);  
  12.  
  13. // Read the IronRuby code  
  14. Assembly execAssembly = Assembly.GetExecutingAssembly();  
  15. Stream codeFile =   
  16.   execAssembly.GetManifestResourceStream("SampleWPApp.MainPage.rb");  
  17. string code = new StreamReader(codeFile).ReadToEnd();  
  18.  
  19. // Execute the IronRuby code  
  20. engine.Execute(code); 

上面的代碼十分簡短,完美地演示了通過 C# 代碼運行 IronRuby 代碼有多么容易。

另外,請務必將以下 using 語句添加到該類中:

  1.           using System.Reflection;  
  2. using System.IO;  
  3. using Microsoft.Scripting.Hosting;  
  4. using IronRuby; 

上面的第三行代碼可以將 System.Windows.Media 程序集加載到 IronRuby 上下文中,從而使該代碼可以與該程序集的類和枚舉進行互操作。

下一行允許 IronRuby 代碼訪問當前的 Silverlight 頁面。 該行代碼通過名為 Phone 的常量向 IronRuby 代碼公開當前實例 (this)。

其余的代碼從嵌入的文件(請注意,應用程序的命名空間將添加到文件名中,因此 MainPage.rb 變成了 SampleWPApp.MainPage.rb)中讀取 IronRuby 代碼,然后使用引擎實例來執行該代碼。

就是這樣。 我們已經創建了一個應用程序,該應用程序加載后,會運行 IronRuby,而該代碼將更改標題并向 Silverlight 頁面添加一個文本塊。 剩下要做的所有事情就是運行該應用程序,運行結果如下圖 所示。

Windows Phone 7 上運行的 IronRuby 驅動的應用程序

每時每刻都在完善

即使在 Windows Phone 7 上使用 IronRuby 的工作流還并不完善,而且您需要注意各種限制,但這只是個起步而已。 IronRuby 和 Windows Phone 7 平臺都是嶄新的,它們時刻都在不斷完善。

二者的結合同時給 .NET Framework 開發人員和 Ruby 開發人員展現了廣大的前景。 現在,.NET 開發人員在編寫 Windows Phone 7 應用程序時,可以充分利用 Ruby 語言無以倫比的功能,例如,將 IronRuby 控制臺融入到其應用程序中或提供可擴展性功能。 而另一方面,Ruby 開發人員也可以史無前例地使用自己的語言來編寫移動應用程序。

毫無疑問,一個充滿大量機遇和無限可能的嶄新世界已經誕生。 而且一切盡在您的掌控之中。

編者注:Shay Friedman 是一位 Microsoft Visual C#/IronRuby MVP,也是《IronRuby Unleashed》(Sams 出版,2010 年)一書的作者。他現在擔任 Sela Group 的動態語言主管,負責全球范圍的課程咨詢和開設工作。可以在 IronShay.com 上閱讀他的博客文章。本文出自MSDN 雜志2010年九月刊。

【編輯推薦】

  1. 不編程也開發 無代碼開發Windows Phone 7應用工具
  2. 使用IronRuby開發Windows Phone 7應用程序
  3. Windows Phone 7設計評測報告
  4. 諾基亞向開發者贈送E7及Windows Phone 7手機
  5. 微軟發布Windows Phone 7開發者向導

 

責任編輯:佚名 來源: MSDN
相關推薦

2011-02-28 10:42:14

Windows Pho微軟

2011-05-10 08:53:46

iOSWindows Pho開發者

2011-06-10 09:03:36

AndroidWindows Pho開發者

2011-08-19 09:09:01

AndroidWP7Windows Pho

2012-01-01 19:33:19

2012-05-15 14:00:51

WP7開發環境

2012-03-04 20:55:33

WP7

2011-06-13 09:34:02

微軟AndroidWindows Pho

2012-07-06 09:26:13

Windows PhoWindows Pho

2013-02-25 11:19:43

WP開發Windows PhoWP開發者

2011-09-22 14:20:10

雷軍小米WP7

2013-06-17 14:10:08

WP7開發Windows Pho豆瓣電臺

2012-05-25 12:57:31

Windows Pho

2012-03-22 14:50:00

WP7微軟諾基亞

2012-04-05 13:39:42

WP7開發Windows Pho

2011-03-08 10:26:45

Windows Pho諾基亞Qt

2011-04-27 09:58:56

Windows PhoLBS微軟

2011-07-28 09:26:18

MangoWindows Pho富士通

2012-06-21 09:07:22

微軟WP7WP8

2011-02-15 09:50:02

Windows PhoKinectMWC
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产探花在线观看视频 | 久久99一区二区 | 国产精品视频在线播放 | 欧美久久视频 | 国产乱码精品1区2区3区 | av在线伊人| 久久精品国产一区二区电影 | 久久精品无码一区二区三区 | 亚洲一二三区精品 | 精品国产欧美一区二区三区成人 | 爱综合| 青青草网 | 精品国产一区二区在线 | 国产精品久久二区 | 青青草精品 | 伊人精品在线视频 | 中文字幕精品一区二区三区在线 | 国产成人a亚洲精品 | 成人国产精品久久 | 91影院| 久热爱| 欧美黄色精品 | 欧美激情区 | 色频| 色偷偷噜噜噜亚洲男人 | 日本人做爰大片免费观看一老师 | 国户精品久久久久久久久久久不卡 | 亚洲视频中文字幕 | 久久久久精 | 久久国产精品一区二区三区 | 91精品一区二区三区久久久久久 | 久久爱黑人激情av摘花 | 国产精品久久一区二区三区 | 狠狠色狠狠色综合系列 | 先锋av资源网 | 国产精品国产成人国产三级 | 欧美日韩专区 | 国产成人免费视频网站高清观看视频 | 日本在线网址 | 精品日韩欧美一区二区 | 久久久久久久电影 |