自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

微軟MVP推薦:WP7上的IronRuby開(kāi)發(fā)

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

前不久,我們?cè)o大家推薦過(guò)如何使用IronRuby開(kāi)發(fā)Windows Phone 7應(yīng)用程序這篇文章,今天繼續(xù)給大家介紹一篇IronRuby如何開(kāi)發(fā)Windows Phone 7的文章,希望讀者能從中得到啟發(fā)。

以下為轉(zhuǎn)發(fā)的全文

幾年前,我是一個(gè)不折不扣的.NET迷。 我對(duì)其他的開(kāi)發(fā)領(lǐng)域毫無(wú)興趣,整個(gè)人都沉醉于自己的封閉世界中。 隨后,我又誤打誤撞地學(xué)習(xí)了 Ruby,那種體驗(yàn)簡(jiǎn)直不可思議。 那種利用語(yǔ)言的內(nèi)置功能來(lái)完成工作的方式深深地吸引了我。

還有的就是,您可以讓一個(gè)人領(lǐng)略 .NET 世界外部的事物,但.NET 將永遠(yuǎn)深深地扎根在那個(gè)人的心里。 因此,當(dāng)我一聽(tīng)說(shuō)微軟 要在Microsoft .NET Framework 上開(kāi)發(fā)一種名為IronRuby的Ruby語(yǔ)言的實(shí)現(xiàn)時(shí),心里十分激動(dòng),然后便一頭鉆了進(jìn)去。

現(xiàn)在,有了 IronRuby,.NET 世界和 Ruby 世界之間就架起了一座彼此連接的橋梁。 這可以使無(wú)限種新可能變?yōu)楝F(xiàn)實(shí),這種連接的好處超乎想象。

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

什么是IronRuby?

2006 年,微軟宣布開(kāi)發(fā)IronRuby。 經(jīng)過(guò)三年多的開(kāi)發(fā),IronRuby 團(tuán)隊(duì)終于在四月份宣布IronRuby 的第一個(gè)穩(wěn)定版本(1.0 版)正式面市。

IronRuby 支持 Ruby 語(yǔ)言的完整功能集,唯一增加的功能是:Ruby 代碼與 .NET Framework 代碼之間的集成。 該集成是完全無(wú)縫的,唯一需要做的就是將 .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 

能夠?qū)崿F(xiàn)該集成可能要?dú)w功于動(dòng)態(tài)語(yǔ)言運(yùn)行時(shí) (DLR),這是一個(gè)添加到 .NET Framework 基礎(chǔ)結(jié)構(gòu)中的層,用于為在該框架上編寫的動(dòng)態(tài)語(yǔ)言提供公共服務(wù)。 DLR 是在 CLR 基礎(chǔ)上編寫而成的,可以使在 .NET 上實(shí)現(xiàn)動(dòng)態(tài)語(yǔ)言變得更加容易。 這是最近我們看到 .NET Framework 動(dòng)態(tài)語(yǔ)言(包括 IronRuby、IronPython、IronJS、Nua、ClojureCLR 等等)不斷興起的主要原因之一。

IronRuby 的主要功能

Ruby 是一種動(dòng)態(tài)語(yǔ)言,IronRuby 也是如此。 這就是說(shuō),在沒(méi)有編譯器的情況下,對(duì)于靜態(tài)語(yǔ)言中在編譯和生成期間完成的大多數(shù)操作,在運(yùn)行時(shí)都能夠完成。 這種行為可以提供當(dāng)前大多數(shù)靜態(tài)語(yǔ)言中難以或不可能實(shí)現(xiàn)的各種功能。

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

動(dòng)態(tài)類型化。IronRuby 變量類型可以在運(yùn)行時(shí)計(jì)算得出,因此無(wú)需在代碼中指定變量的類型。 但是,這并不表示 IronRuby 沒(méi)有類型。 IronRuby 包含類型,而且和靜態(tài)語(yǔ)言中的類型一樣,每種類型都有其各自的規(guī)則。 以下代碼示例用幾個(gè)簡(jiǎn)單的步驟說(shuō)明了動(dòng)態(tài)類型化機(jī)制:

  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" 

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

使用 IronRuby 控制臺(tái)

鴨子類型化。IronRuby 是一種面向?qū)ο蟮恼Z(yǔ)言。 正如大家在面向?qū)ο蟮恼Z(yǔ)言中所期待的那樣,IronRuby 支持類、繼承、封裝和訪問(wèn)控制。 但是,與許多靜態(tài)語(yǔ)言一樣,它不支持接口和抽象類。

不過(guò),這并不是該語(yǔ)言的設(shè)計(jì)缺陷。 有了動(dòng)態(tài)類型化功能,聲明接口或抽象類之類的代碼約定顯得多此一舉。 唯一與對(duì)象有關(guān)的事項(xiàng)是是否定義了特定的方法;如果已定義,則無(wú)需進(jìn)行標(biāo)記。 這就是通常所說(shuō)的鴨子類型化 - 如果某個(gè)類型的叫聲像鴨子,游泳姿勢(shì)也像鴨子,那么它就是一只鴨子,無(wú)需進(jìn)行標(biāo)記即可將其視為一只鴨子。

例如,下面的代碼示例包含兩個(gè)類,這些類包含一個(gè)名為 say_hi 的方法以及另一個(gè)名為 introduce 的常規(guī)方法,后者可以檢索一個(gè)對(duì)象并執(zhí)行其 say_hi 方法。(請(qǐng)注意,這里不存在接口或其他標(biāo)記機(jī)制。)

  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 提供了強(qiáng)大的元編程功能。 元編程是一種可在運(yùn)行時(shí)添加、更改甚至刪除方法的方式。 例如,可以向類中添加方法、寫入定義其他方法的方法或刪除現(xiàn)有類中的方法定義。 下面的代碼的類中添加了一個(gè)方法,添加的方法將反映到該類的所有當(dāng)前實(shí)例和將來(lái)實(shí)例中。

  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" 

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

RubyGems。Ruby 語(yǔ)言功能再?gòu)?qiáng)大,如果沒(méi)有可以與其一起安裝和使用的外部庫(kù),也不會(huì)取得如此巨大的成功。

安裝 Ruby 庫(kù)的主要方法是通過(guò) RubyGems 系統(tǒng)。 這是一種程序包管理器,可以幫助分發(fā)和安裝稱為 gem 的 Ruby 庫(kù)。 有數(shù)千種免費(fèi)的 gem 可以使用,幾乎涵蓋了包括測(cè)試框架、稅率計(jì)算庫(kù)以及 Web 開(kāi)發(fā)框架等在內(nèi)的所有編程方面和任務(wù)。

您應(yīng)該會(huì)注意到某些 RubyGems 依賴于 C 庫(kù)。 這些 gem 無(wú)法在當(dāng)前版本的 IronRuby 上運(yùn)行,除非將 C 庫(kù)移植到 Ruby 或 C# 平臺(tái)上。

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

IronRuby 和 Silverlight

Silverlight 2 中引入了一項(xiàng)全新的重要功能:針對(duì) DLR 語(yǔ)言的支持。 這樣一來(lái),開(kāi)發(fā)人員就可以將 IronRuby 用于 Silverlight 應(yīng)用程序,既可以將它融入到應(yīng)用程序中,也可以使用它來(lái)編寫整個(gè) Silverlight 應(yīng)用程序。

且慢,Silverlight 可以在 Windows Phone 7 上運(yùn)行,對(duì)吧? 當(dāng)然可以。

Windows Phone 7

Windows Phone 7

萬(wàn)眾期待的 Windows Phone 7 是微軟的下一代移動(dòng)平臺(tái),它是智能手機(jī)行業(yè)的一項(xiàng)創(chuàng)新性突破。 除了標(biāo)準(zhǔn)的多點(diǎn)觸控功能和炫目的新 UI 之外,從開(kāi)發(fā)人員的角度來(lái)看,Windows Phone 7 的最大新聞莫過(guò)于它是在 Silverlight 平臺(tái)上開(kāi)發(fā)的。

正是歸功于微軟這一利用成熟技術(shù)的明智之舉,廣大開(kāi)發(fā)人員只需輕松簡(jiǎn)單地學(xué)習(xí)一下,就可以創(chuàng)建移動(dòng)應(yīng)用程序了。

由于 DLR 語(yǔ)言可以在 Silverlight 環(huán)境中運(yùn)行,因此您可以充分利用 IronRuby,使用它來(lái)編寫 Windows Phone 7 應(yīng)用程序。

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

Reflection.Emit 命名空間是影響 IronRuby 的主要缺失功能。 IronRuby 使用此功能來(lái)動(dòng)態(tài)地編譯代碼,以使應(yīng)用程序更快地運(yùn)行。 但是,它只屬于性能上的優(yōu)化,并不是運(yùn)行簡(jiǎn)單腳本和應(yīng)用程序所必備的組件。

另一個(gè)限制與新 Windows Phone 7 應(yīng)用程序的創(chuàng)建方式有關(guān)。 這類應(yīng)用程序只能通過(guò) Visual Studio 并使用 C# 來(lái)創(chuàng)建。 這一要求迫使開(kāi)發(fā)人員不得不使用 C# 編寫代碼來(lái)初始化 IronRuby 代碼。

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

在 Windows Phone 7 上構(gòu)建簡(jiǎn)單的 IronRuby 應(yīng)用程序

要開(kāi)發(fā) IronRuby 驅(qū)動(dòng)的 Windows Phone 7 應(yīng)用程序,需要先安裝 Windows Phone 7 開(kāi)發(fā)人員工具,這些工具可從 developer.windowsphone.com 上進(jìn)行下載。

安裝這些工具之后,請(qǐng)打開(kāi) Visual Studio,然后轉(zhuǎn)到“文件”|“新建”|“項(xiàng)目”。 在“新建項(xiàng)目”對(duì)話框中,選擇“Silverlight for Windows Phone”類別,然后選擇“Windows Phone 應(yīng)用程序”項(xiàng)目模板。 為該項(xiàng)目命名,然后繼續(xù)操作。

新項(xiàng)目一打開(kāi),您就會(huì)看到已自動(dòng)創(chuàng)建了一個(gè)簡(jiǎn)單的 XAML 文件。 請(qǐng)注意,XAML 通常是 Silverlight 必需的,并不依賴于語(yǔ)言。 因此,即使應(yīng)用程序代碼將使用 IronRuby 來(lái)編寫,也必須使用 XAML 來(lái)創(chuàng)建 UI。在這個(gè)簡(jiǎn)單的應(yīng)用程序中,默認(rèn)的 XAML 文件已經(jīng)夠用,因此這里無(wú)需做任何更改。

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

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

接下來(lái),將下面的代碼復(fù)制到該文件中。

  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代碼非常簡(jiǎn)單易懂;我們?cè)O(shè)置了標(biāo)題,創(chuàng)建了一個(gè)文本塊,其中包含一些文本,并將其添加到頁(yè)面中。 請(qǐng)注意,您可以在上面提及的 Windows Phone 環(huán)境運(yùn)行限制下,使用Ruby語(yǔ)言中的所有功能(這里就不演示了),例如類、元編程和庫(kù)。

現(xiàn)在,剩下的任務(wù)就是實(shí)際執(zhí)行 IronRuby 代碼了。 要在應(yīng)用程序加載時(shí)執(zhí)行該代碼,請(qǐng)將下面的代碼添加到位于 MainPage.xaml.cs 文件內(nèi)的 MainPage 類構(gòu)造函數(shù)中。

下面代碼以通過(guò)類構(gòu)造函數(shù)執(zhí)行 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); 

上面的代碼十分簡(jiǎn)短,完美地演示了通過(guò) C# 代碼運(yùn)行 IronRuby 代碼有多么容易。

另外,請(qǐng)務(wù)必將以下 using 語(yǔ)句添加到該類中:

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

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

下一行允許 IronRuby 代碼訪問(wèn)當(dāng)前的 Silverlight 頁(yè)面。 該行代碼通過(guò)名為 Phone 的常量向 IronRuby 代碼公開(kāi)當(dāng)前實(shí)例 (this)。

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

就是這樣。 我們已經(jīng)創(chuàng)建了一個(gè)應(yīng)用程序,該應(yīng)用程序加載后,會(huì)運(yùn)行 IronRuby,而該代碼將更改標(biāo)題并向 Silverlight 頁(yè)面添加一個(gè)文本塊。 剩下要做的所有事情就是運(yùn)行該應(yīng)用程序,運(yùn)行結(jié)果如下圖 所示。

Windows Phone 7 上運(yùn)行的 IronRuby 驅(qū)動(dòng)的應(yīng)用程序

每時(shí)每刻都在完善

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

二者的結(jié)合同時(shí)給 .NET Framework 開(kāi)發(fā)人員和 Ruby 開(kāi)發(fā)人員展現(xiàn)了廣大的前景。 現(xiàn)在,.NET 開(kāi)發(fā)人員在編寫 Windows Phone 7 應(yīng)用程序時(shí),可以充分利用 Ruby 語(yǔ)言無(wú)以倫比的功能,例如,將 IronRuby 控制臺(tái)融入到其應(yīng)用程序中或提供可擴(kuò)展性功能。 而另一方面,Ruby 開(kāi)發(fā)人員也可以史無(wú)前例地使用自己的語(yǔ)言來(lái)編寫移動(dòng)應(yīng)用程序。

毫無(wú)疑問(wèn),一個(gè)充滿大量機(jī)遇和無(wú)限可能的嶄新世界已經(jīng)誕生。 而且一切盡在您的掌控之中。

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

【編輯推薦】

  1. 不編程也開(kāi)發(fā) 無(wú)代碼開(kāi)發(fā)Windows Phone 7應(yīng)用工具
  2. 使用IronRuby開(kāi)發(fā)Windows Phone 7應(yīng)用程序
  3. Windows Phone 7設(shè)計(jì)評(píng)測(cè)報(bào)告
  4. 諾基亞向開(kāi)發(fā)者贈(zèng)送E7及Windows Phone 7手機(jī)
  5. 微軟發(fā)布Windows Phone 7開(kāi)發(fā)者向?qū)?/a>

 

責(zé)任編輯:佚名 來(lái)源: MSDN
相關(guān)推薦

2011-02-28 10:42:14

Windows Pho微軟

2011-08-19 09:09:01

AndroidWP7Windows Pho

2011-05-10 08:53:46

iOSWindows Pho開(kāi)發(fā)者

2011-06-10 09:03:36

AndroidWindows Pho開(kāi)發(fā)者

2012-01-01 19:33:19

2012-05-15 14:00:51

WP7開(kāi)發(fā)環(huán)境

2012-07-06 09:26:13

Windows PhoWindows Pho

2013-02-25 11:19:43

WP開(kāi)發(fā)Windows PhoWP開(kāi)發(fā)者

2011-06-13 09:34:02

微軟AndroidWindows Pho

2012-03-04 20:55:33

WP7

2012-05-25 12:57:31

Windows Pho

2012-03-22 14:50:00

WP7微軟諾基亞

2012-04-05 13:39:42

WP7開(kāi)發(fā)Windows Pho

2013-06-17 14:10:08

WP7開(kāi)發(fā)Windows Pho豆瓣電臺(tái)

2011-09-22 14:20:10

雷軍小米WP7

2011-07-28 09:26:18

MangoWindows Pho富士通

2011-03-08 10:26:45

Windows Pho諾基亞Qt

2011-04-27 09:58:56

Windows PhoLBS微軟

2012-06-21 09:07:22

微軟WP7WP8

2013-06-17 14:35:40

WP7Windows Pho應(yīng)用開(kāi)源模板
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)