C#和.NET解决方案
一大堆程序员会对刚刚提出的问题提出各种各样的答案,但是可以为C#提供一个很好的论点。 微软在2000年推出了C#,它是一种相当新的编程语言,至少与Objective-C和Java相比。 起初,C#似乎是一个相当直接,强类型,命令式的面向对象的语言,当然也受C ++(和Java)的影响,但是比C ++语法更简洁,也没有历史包袱。 另外,C#的第一个版本对属性和事件提供了语言级的支持,最终成为特别适合编程图形用户界面的成员类型。
但是C#多年来一直在不断发展壮大。 泛型,lambda函数,LINQ和异步操作的支持已经成功地转换了C#,现在它被正确地分类为一个多范例编程语言。 C#代码可能传统上是强制性的,或者代码可以用声明性或功能性编程范例来调整。
自成立以来,C#一直与Microsoft .NET Framework密切相关。 在最底层,.NET为C#基本数据类型(int,double,string等)提供了一个基础结构。 但是,广泛的.NET Framework类库为许多不同类型的编程中遇到的许多常见杂事提供了支持。 这些包括:
-
数学
-
调试
-
反射
-
集合
-
全球化
-
文件I / O
-
网络
-
安全性
-
线程
-
Web服务
-
数据处理
-
XML和JSON读写
这是C#和.NET被视为一个引人注目的跨平台解决方案的另一个重要原因:
这不只是假设。这是现实。
微软在2000年6月发布.NET之后不久,公司Ximian(由Miguel de Icaza和Nat Friedman创立)发起了一个名为Mono的开源项目,以创建C#编译器和.NET Framework的替代实现可以在Linux上运行。
十年后的2011年,Ximian的创始人(被Novell收购)成立了Xamarin,这个Xamarin仍然是Mono开源版本的贡献者,同时也使Mono成为了跨平台移动解决方案的基础。
2014年在C#和.NET中取得了一些发展,预示着未来的发展。 .NET编译器平台(以前的代码名称为“Roslyn”)的开放源代码版本的C#编译器已经发布。而.NET基金会则宣布将成为开源.NET技术的管理者,其中Xamarin扮演重要角色。
2016年3月,微软收购了Xamarin,目标是为更广泛的微软开发者社区带来跨平台的移动开发。 Xamarin.Forms现在免费提供给Visual Studio的所有用户。
适用于所有平台的单一语言
Xamarin的前三年,主要集中在编译器技术和三个基本的.NET库集:
-
Xamarin.Mac,从MonoMac项目发展而来。
-
Xamarin.iOS,从MonoTouch发展而来。
-
Xamarin.Android,是从Mono for Android或(非正式)MonoDroid演变而来的。
总的来说,这些库被称为Xamarin平台。 这些库包含本地Mac,IOS和Android API的.NET版本。 使用这些库的程序员可以使用C#编写应用程序来定位这三个平台的本地API,但也可以(作为奖励)访问.NET Framework类库。
开发人员可以使用Visual Studio来构建Xamarin应用程序,针对iOS和Android以及所有各种Windows平台。 但是,iPhone和iPad的开发也需要通过本地网络连接到PC的Mac。 这台Mac必须安装Xcode以及基于OS X的集成开发环境Xamarin Studidio,它可以让你在Mac上开发iPhone,iPad,Mac OS X和Android应用程序。 Xamarin Studio不允许你定位Windows平台。
共享代码
使用单一编程语言定位多个平台的优势来自在应用程序之间共享代码的能力。
在共享代码之前,应用程序必须为此目的而构建。特别是由于图形用户界面的广泛使用,程序员已经理解将应用程序代码分离成功能层的重要性。也许最有用的部门是在用户界面代码和底层数据模型和算法之间。流行的MVC(模型 - 视图 - 控制器)应用程序体系结构将这种代码分离形式化为模型(底层数据),视图(数据的可视化表示)以及控制器(处理来自用户的输入)。
MVC起源于20世纪80年代。最近,MVVM(Model-View-ViewModel)架构已经基于现代GUI有效地实现了MVC的现代化。 MVVM将代码分离成Model(底层数据),View(用户界面,包括视觉和输入)和ViewModel(管理在Model和View之间传递的数据)。
当一个程序员开发一个面向多个移动平台的应用程序时,MVVM体系结构可以帮助指导开发人员将代码分解为特定于平台的视图(需要与平台API交互的代码)以及与平台无关的模型和视图模型。
这个独立于平台的代码通常需要访问文件或网络,或使用集合或线程。通常,这些作业将被视为操作系统API的一部分,但它们也是可以使用.NET Framework类库的作业,并且如果每个平台上都提供了.NET,那么这些代码就是与平台无关的。
然后,独立于平台的应用程序的部分可以被隔离,并且在Visual Studio或Xamarin Studio的上下文中放入一个单独的项目。这可以是共享资源项目(SAP)(简单地由代码和其他项目可访问的其他资源文件组成)或便携式类库(PCL),它将所有常见代码封装在动态链接库(DLL)然后可以从其他项目引用。
无论使用哪种方法,此通用代码都可以访问.NET Framework类库,因此可以执行文件I / O,处理全球化,访问Web服务,分解XML等等。
这意味着您可以创建一个Visual Studio解决方案,该解决方案包含四个C#项目,以定位三个主要的移动平台(全部可以访问通用的PCL或SAP),也可以使用Xamarin Studio来定位iPhone和Android设备。
下图说明了Visual Studio或Xamarin Studio项目,Xamarin库和平台API之间的相互关系。 第三列是指任何基于.NET的Windows平台,无论设备如何:
第二行中的框是实际的平台特定的应用程序。这些应用程序可以调用通用项目,也可以(使用iPhone和Android)实现本地平台API的Xamarin库。
但是该图并不完整:它不显示调用.NET Framework类库的SAP或PCL。究竟是什么版本的.NET取决于通用代码:PCL可以访问它自己的.NET版本,而SAP则使用并入每个特定平台的.NET版本。
在这个图中,Xamarin.iOS和Xamarin.Android库看起来很实用,虽然它们当然很重要,但它们大多只是语言绑定,并不会显着增加API调用的任何开销。
在构建iOS应用程序时,Xamarin C#编译器像往常一样生成C#中间语言(IL),但它随后使用Mac上的Apple编译器生成本机iOS代码,就像Objective-C编译器一样。从应用程序到iOS API的调用与应用程序是用Objective-C编写的相同。
对于Android应用程序,Xamarin C#编译器会生成IL,它与Java引擎一起运行在设备上的Mono版本上,但是来自应用程序的API调用几乎与应用程序是用Java编写的相同。
对于具有非常特定于平台的需求的移动应用程序,也是一个潜在的可共享的平台独立代码块,Xamarin.iOS和Xamarin.Android提供了优秀的解决方案。 您可以访问整个平台API,并具有所有权力(和责任)。
但对于可能不需要太多平台特性的应用程序,还有一种方法可以更加简化您的生活。
阅读(2229) | 评论(0) | 转发(0) |