用IronRuby创建WPF应用程序
2010-10-09 08:15:31 来源:WEB开发网namespace MyClassLibrary
{
public class Person
{
public string Name { get; set; }
public string Introduce()
{
return String.Format("Hi, I'm {0}", Name);
}
}
}
让我们用Ruby来扩展它,并借此培养程序员的思维习惯。
require 'MyClassLibrary.dll'
class Programmer < MyClassLibrary::Person
ACCEPTABLE_DRINKS = [:coffee, :tea, :cola, :red_bull]
def drink(liquid)
if ACCEPTABLE_DRINKS.include? liquid
puts "Mmm... #{name} likes code juice!"
else
raise "Need caffeine!"
end
end
end
me = Programmer.new
me.name = "Edd"
puts me.introduce
me.drink(:coffee)
关于代码冗长
老实说,我不介意使用繁琐的代码引用,只要它不影响程序的性能即可,就像在之前的代码显示的那样。我喜欢简洁的代码,冗长的寻址和对象描述的简化会产生某种安全感,尽管这和本句形成了鲜明的对比。然而,在使用IronRuby的时候,我已厌倦输入 System::Whatever::Something。不管使用何种语言,总有一些开发人员喜欢设定命名空间并忘掉它们。不用担心,IronRuby 也有这种人。
由于.NET命名空间在IronRuby中是模块,所以在调用include后,完全可以把.NET命名空间引入IronRuby代码,就像要引入一个Ruby组织模块一样。
class Clock
include System::Windows::Shapes
include System::Windows::Media
include System::Windows::Threading
# and so on...
这样做可以减少调用 System::Windows::Shapes::Ellipse.new,代之以Ellipse.new,或通过 System::Windows::Threading::DispatcherPriority.Render引用 DispatcherPriority.Render。
在.NET Framework中,另一个简化IronRuby代码以及处理这些冗长代码的方法就是通过给命名空间取别名来完成。
require 'System.Windows.Forms'
WinForms = System::Windows::Forms
WinForms::Form.new
WinForms::Label.new
结论
到此为止,我希望你能更好的了解IronRuby与.NET间的互操作,以及如何利用.NET Framework的动态属性和Ruby的优雅语法。
Ruby的风格和用法让数据处理变成一种乐趣,当然,在IronRuby也一样,它结合了 WPF生成图像的功能。我希望大家能具体看到使用这两种技术进行数据可视化的可能性。使用IronRuby来创建数据和信息图的视觉描述是多么的振奋人心。尽管在这个项目中,我们仅展现了一些简单的信息——时间——但潜在的可能性是巨大的。
更多精彩
赞助商链接