使用C#和.NET的原因
早在2000年6月,微软公布.NET之后不久,Ximian公司诞生了一个开源项目叫做Mono,运行在Linux环境下面的C#编译器和.NET Framework。十年后,在2011年,Ximian的创立者成立了Xamarin,仍然致力于开源版本的Mono,此时Mono已经适应了移动设备的跨平台。
The advantage of targeting multiple platforms with a single programming language comes from the ability to share code among the applications.
原文
针对多个不同的平台使用一种编程语言的优点在于可以共享应用程序之间的代码。
Before code can be shared,an application must be structured for that purpose. Particularly since the widespread use of graphical user interfaces,programmers have understood the importance of separating application code into functional layers. Perhaps the most useful division is between user-interface code and the underlying data models and algorithms. The popular MVC (Model-View-Controller) application architecture formalizes this code separation into a Model (the underlying data), the View (the visual representation of the data), and the Controller (which handles input from the user).
原文
在开发程序之前,我们就要考虑好代码的共享问题。自从图形界面的应用大行其道,程序员开始认识到将逻辑代码从界面中分离出来,放到单独的层中有多么重要。也许最有效的分层方法是:数据层、业务逻辑层、用户界面。当下流行的MVC(模型-视图-控制器)应用程序体系结构将代码分离到模型(数据基础)、视图(数据的可视化表示)以及控制器(处理用户的输入)中。
MVC originated in the 1980s. More recently, the MVVM (Model-View-ViewModel) architecture has effectively modernized MVC based on modern GUIs. MVVM separates code into the Model (the underlying data), the View (the user interface, including visuals and input), and the ViewModel (which manages data passing between the Model and the View).
原文
MVC模式起源于20世纪80年代,最近,基于现代图形用户界面的MVVM模式比MVC更加灵活和有效。MVVM模式将代码分离到模型(基础数据)、视图(用户接口,包括可视化和输入)和视图模型(负责管理模型和视图直接的数据传递)。
When a programmer develops an application that targets multiple mobile platforms, the MVVM architecture helps guide the developer into separating code into the platform-specific View(the code that requires interacting with the platform APIs) and the platform-independent Model and ViewModel.
原文
当程序员开发一个款跨越多个移动平台的应用,MVVM架构模式可以引导开发者将代码划分为平台相关的视图(需要和平台API交互的代码)和平台无关的模型、视图模型。
Often this platform-independent code needs to access files or the network or use collections or threading. Normally these jobs would be considered part of an operating system API, but they are also jobs that can make use of the .NET Framework class library, and if .NET is available on each platform, then this code is effectively platform independent.
原文
通常平台无关的代码包括像文件访问、网络访问、使用集合或者线程的这类操作。很多时候,这些工作会被集成到操作系统API的当中,或者也可以通过.NET类库进行调用。如果.NET可以在每一种平台中进行调用,那么这些代码就不会对平台产生依赖。
The part of the application that is platform independent can then be isolated and—in the context of Visual Studio or Xamarin Studio—put into a separate project. This can be either a Shared Asset Project (SAP)—which simply consists of code and other asset files accessible from other projects—or a Portable Class Library (PCL), which encloses all the common code in a dynamic-link library (DLL) that can then be referenced from other projects.
原文
在程序中,平台无关的那一部分通常被放到一个单独的项目中。这个项目可以是一个SAP(Shared Asset Project,包含一些可以被其他项目所访问的代码和资源文件),也可以是一个PCL(Portable Class Library,可移植类库,将公共代码封装到一个DLL中,给其他项目调用)。
Whichever method you use, this common code has access to the .NET Framework class library, so it can perform file I/O, handle globalization, access web services, decompose XML, and so forth.
原文
不管使用的是哪一种方法,公共代码都能够访问.NET类库,所以它能够处理文件的输入/输出、访问Web服务、解析XML等等。
This means that you can create a single Visual Studio solution that contains four C# projects to target the three major mobile platforms (all with access to a common PCL or SAP), or you can use Xamarin Studio to target iPhone and Android devices.
原文
我们可以创建一个VS解决方案,包含四个项目,一个公共类库和针对3个主流平台的C#项目。或者可以使用Xamarin Studio创建只针对某一个平台的项目。
The following diagram illustrates the interrelationships between the Visual Studio or Xamarin Studio projects, the Xamarin libraries, and the platform APIs. The third column refers to any .NET-based Windows Platform regardless of the device:
原文
下图展示了Visual Studio或者Xamarin Studio项目、Xamarin 类库和平台API之间的关系。第三列指的是基于.NET的Windows平台,而不管使用的是何种设备。
The boxes in the second row are the actual platform-specific applications. These apps make calls into the common project and also (with the iPhone and Android) the Xamarin libraries that implement the native platform APIs. But the diagram is not quite complete: it doesn't show the SAP or PCL making calls to the .NET Framework class library. Exactly what version of .NET this is depends on the common code: A PCL has access to its own version of .NET, while an SAP uses the version of .NET incorporated into each particular platform. In this diagram, the Xamarin.iOS and Xamarin.Android libraries seem to be substantial, and while they are certainly important, they’re mostly just language bindings and do not significantly add any overhead to API calls. When the iOS app is built, the Xamarin C# compiler generates C# Intermediate Language (IL) as usual, but it then makes use of the Apple compiler on the Mac to generate native iOS machine code just like the Objective-C compiler. The calls from the app to the iOS APIs are the same as though the application were written in Objective-C. For the Android app, the Xamarin C# compiler generates IL, which runs on a version of Mono on the device alongside the Java engine, but the API calls from the app are pretty much the same as though the app were written in Java. For mobile applications that have very platform-specific needs, but also a potentially shareable chunk of platform-independent code, Xamarin.iOS and Xamarin.Android provide excellent solutions. You have access to the entire platform API, with all the power (and responsibility) that implies. But for applications that might not need quite so much platform specificity, there is an alternative that will simplify your life even more.
原文
图中的第二行指的是特定平台下的实际应用程序。应用程序去调用公共的类库项目(PLC、SAP)和实现了本地平台API的Xamarin类库。
但上图描述的内容还不够全面,它并没有显示出PLC或SAP怎样调用.NET类库。公共代码究竟依赖于哪一个版本的.NET:一个PLC类库可以访问它自身的.NET版本,然而SAP所使用的.NET版本取决于特定的平台。
图中的Xamarin.iOS和Xamarin.Android看上去非常重要,但是它们大多只是语言绑定,并没有显著真加对API调用的开销。
当我们生成一个ISO应用程序的时候,Xamarin C#编译器通常会先生成C#中间语言,然后它会利用MAC上的苹果编译器去生成原生的ISO机器代码,就如同Object-C编译器一样。即使应用程序是使用的Object-C开发,应用程序调用ISO的API方式都是一样的。
对于Android应用程序,Xamarin C#编译器生成中间语言,然后运行在一个版本的Mono设备上面,这个设备同时也安装了Java引擎。这个应用程序的API调用基本上和Java写的程序几乎一样。
如果移动应用程序有非常依赖于具体平台的需求,还共享一个平台相关的代码块,Xamarin.iOS和Xamarin.Android有一个优秀的解决方案,你可以访问平台所有的API。
但是对于不需要这么多平台特异性的应用程序,有更加简化的替代方法。
使用C#和.NET的原因的更多相关文章
- 网络原因导致 npm 软件包 node-sass / gulp-sass 安装失败的处理办法
如果你正在构建一个基于 gulp 的前端自动化开发环境,那么极有可能会用到 gulp-sass ,由于网络原因你可能会安装失败,因为安装过程中部分细节会到亚马逊云服务器上获取文件.本文主要讨论在不变更 ...
- IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法
直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...
- 移动站应该尝试百度MIP的五个原因
MIP是什么?MIP是百度在2016年提出的移动网页加速器项目. MIP能做什么?MIP能帮助站长和网站开发者快速搭建移动端页面. MIP怎么加速?MIP从前端渲染和页面网络传输两方面进行优化,杜绝页 ...
- Nested Loops join时显示no join predicate原因分析以及解决办法
本文出处:http://www.cnblogs.com/wy123/p/6238844.html 最近遇到一个存储过程在某些特殊的情况下,效率极其低效, 至于底下到什么程度我现在都没有一个确切的数据, ...
- 浅析SQL查询语句未显式指定排序方式,无法保证同样的查询每次排序结果都一致的原因
本文出处:http://www.cnblogs.com/wy123/p/6189100.html 标题有点拗口,来源于一个开发人员遇到的实际问题 先抛出问题:一个查询没有明确指定排序方式,那么,第二次 ...
- 【腾讯优测干货分享】如何降低App的待机内存(三)——探索内存增长的原因
本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/8BiKIt3frq9Yv9KV5FXlGw 1.3新问题的进一步挖 ...
- Linux环境下shell和vim中乱码原因及消除办法
shell和vim中乱码原因及消除办法 作者:Jack47 在Linux下开发,经常遇到乱码问题:shell或者vim中显示不了中文,或者能够显示,但不能输入中文.每次都是上网去搜,或者同事告诉我一些 ...
- SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因
复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过 ...
- 连接SQLServer时,因启用连接池导致孤立事务的原因分析和解决办法
本文出处:http://www.cnblogs.com/wy123/p/6110349.html 之前遇到过这么一种情况: 连接数据库的部分Session会出现不定时的阻塞,这种阻塞时长时短,有时候持 ...
- SELECT TOP 1 比不加TOP 1 慢的原因分析以及SELECT TOP 1语句执行计划预估原理
本文出处:http://www.cnblogs.com/wy123/p/6082338.html 现实中遇到过到这么一种情况: 在某些特殊场景下:进行查询的时候,加了TOP 1比不加TOP 1要慢(而 ...
随机推荐
- Python中 filter | map | reduce | lambda的用法
1.filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tupl ...
- [转]Jenkins Xcode打包ipa
本地打包. 如果Mac 上没有安装brew.先安装:ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/ins ...
- python 从文件导入分类
# -*- coding:utf-8 -*- """ 从文件导入分类 根据行首制表符或空格确定层级关系(4个空格等于一个制表符 同一行制表符和空格不能混用 ) 必须是 u ...
- wp8.1 Study19:通知
一.通知形式 在windowsphone系统中,通知有很多中形式,如下图 (Tile磁贴在前一博文已复习过,Badge形式与tile类似) 1.Toast 它主要是利用xml文件来编写的,xml代码如 ...
- sql2008 无法附加数据库
sql2008 因为数据库正在使用,所以无法获得对数据库的独占访问权---还原或删除数据库的解决方法 数据库还原出现 3154错误 --主备份 --RESTORE DATABASE [NET_CN] ...
- Linux定时器相关源码分析
Linux的定时器使用时间轮算法.数据结构不难理解,核心数据结构与散列表及其相似,甚至可以说,就是散列表.事实上,理解其散列表的本质,有助于对相关操作的理解. 数据结构 这里先列出一些宏,稍后解释: ...
- 在服务器端将XML转换成HTML
以下是在服务器上转换XML文件所需要的简单源代码: <% 'Load the XML set xml = Server.CreateObject("Microsoft.XMLDOM&q ...
- 单例模式(Singleton Pattern)
动机: 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性.以及良好的效率. 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例? 这应该是类设 ...
- 利用Jmeter进行Web测试
JMeter介绍 脚本录制 运行JMeter进行测试 JMeter主要组件介绍 参数化设置 动态数据关联 使用命令行运行JMeter脚本 利用XSLT分析JMeter结果文件 1:JMeter,一个1 ...
- Python的平凡之路(2)
一.标准库(sys & os): Python 的标准库(standard library) 是随着 Python 一起安装在你的电脑中的,是 Python 的一部分 (当然也有特殊情况. ...