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

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

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

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

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

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

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

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

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

什么是IronRuby?

2006 年,微軟宣布開發(fā)IronRuby。 經(jīng)過三年多的開發(fā),IronRuby 團隊終于在四月份宣布IronRuby 的第一個穩(wěn)定版本(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 

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

IronRuby 的主要功能

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

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

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

  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 代碼并立即執(zhí)行該代碼的應(yīng)用程序。 這種執(zhí)行流也稱為讀取-求值-輸出-循環(huán) (REPL)。 您可以定義變量、方法甚至類,加載 IronRuby 文件或 .NET Framework 程序集,并立即使用它們。 例如,圖 1 中顯示一個簡單的控制臺會話,該會話中創(chuàng)建了一個類并立即使用該類。

使用 IronRuby 控制臺

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

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

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

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

  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" 

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

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

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

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

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

IronRuby 和 Silverlight

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

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

Windows Phone 7

Windows Phone 7

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

下面代碼以通過類構(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); 

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

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

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

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

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

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

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

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

每時每刻都在完善

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

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

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

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

【編輯推薦】

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

 

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

2011-02-28 10:42:14

Windows Pho微軟

2012-01-01 19:33:19

2011-05-10 08:53:46

iOSWindows Pho開發(fā)者

2011-06-10 09:03:36

AndroidWindows Pho開發(fā)者

2011-08-19 09:09:01

AndroidWP7Windows Pho

2012-07-06 09:26:13

Windows PhoWindows Pho

2012-05-15 14:00:51

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

2012-03-04 20:55:33

WP7

2011-06-13 09:34:02

微軟AndroidWindows Pho

2013-02-25 11:19:43

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

2012-05-25 12:57:31

Windows Pho

2012-03-22 14:50:00

WP7微軟諾基亞

2011-04-27 09:58:56

Windows PhoLBS微軟

2011-03-08 10:26:45

Windows Pho諾基亞Qt

2011-07-28 09:26:18

MangoWindows Pho富士通

2012-04-05 13:39:42

WP7開發(fā)Windows Pho

2011-09-22 14:20:10

雷軍小米WP7

2013-06-17 14:10:08

WP7開發(fā)Windows Pho豆瓣電臺

2012-06-21 09:07:22

微軟WP7WP8

2011-10-27 09:26:46

諾基亞WP7
點贊
收藏

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

主站蜘蛛池模板: 中文字幕视频在线观看免费 | 天天艹日日干 | 日韩一区二区三区在线视频 | 男女啪啪高潮无遮挡免费动态 | 久在线观看 | 国产九九av | 欧美一级精品片在线看 | 久国产精品 | 看片wwwwwwwwwww | 日本福利一区 | 成人av激情| 日韩精品999 | 国产成人精品网站 | 欧美中国少妇xxx性高请视频 | 中文字幕一区在线观看视频 | 欧美在线高清 | 中文字幕日韩欧美一区二区三区 | 国产精品成人在线播放 | 春色av| 日韩精品一区二区在线观看 | 亚洲男女视频在线观看 | 日本精品视频在线观看 | 97精品一区二区 | 成人国产精品久久 | h视频免费在线观看 | 国产一区二区三区在线免费 | 亚洲欧美国产视频 | 久久精品视频免费观看 | av影片在线| 亚洲超碰在线观看 | 久久久九九 | 国产一级视屏 | 少妇精品久久久久久久久久 | 日韩欧美精品一区 | 久久亚洲欧美日韩精品专区 | 91av入口| 性视频网 | a级片在线| 天天天操天天天干 | 日本精品一区二区三区在线观看视频 | 欧美aaa一级片 |