为了说明这一点,在许多人看来,Java从来没有在它的“写一次运行任何地方”的承诺。
充其量你得到的是“只写一次,到处调试”或者“只写一次,到处都是垃圾”
成功的基于clr的应用程序都是使用目标平台本机的图形框架编写的。
例如,以下非常成功的Linux应用程序使用C绑定到GTK(称为GTK)而不是像您期望的那样使用Winforms编写:
像iTunes这样的女妖音乐播放器
fspot-照片管理器
假小子笔记程序
Gnomedo-快速发射器和基座
同样成功的Windows.NET应用程序不是使用GTK编写的(即使它是跨平台的),而是使用WinForms或WPF编写的。
当google开发chrome时,他们并没有尝试使用跨平台gui框架,而是选择在每个平台上使用本地gui框架。为什么?因为这样,应用程序就可以很好地适应它的环境,它的外观、感觉和行为就好像它所在的操作系统的本机一样。
基本上,当你试着在任何地方写一次的时候,你必须做出认真的妥协,而你最终得到的是一个在任何地方都不起作用的东西。
这个行业基本上放弃了“随地写”的崇高目标,认为这是一个在实践中没有成功的好主意。
mono/.net的最佳方法是共享较低级别的二进制文件,并在每个目标平台上使用本机gui框架。Linux上的GTK、Windows上的Winforms或WPF、Mac上的Cocoasharp。这样你的应用程序看起来和感觉就像一个本地应用程序。