ASP.NET MVC企业级实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-07 00:18:26

点击下载

作者:邹琼俊,夏毓彦

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

ASP.NET MVC企业级实战

ASP.NET MVC企业级实战试读:

前言

ASP.NET MVC 4是目前大部分IT企业使用的Web开发技术,许多互联网公司招聘都明确要求熟悉ASP.NET MVC。

最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员根本没有ASP.NET MVC项目经验,其中包括一些工作了四五年,甚至八年十年的。还有一些.NET程序员对ASP.NET MVC的认知只是停留在大学老师教过、自己学过、以前公司用过……这样的话在公司项目开发过程中往往无法完成一些稍微复杂一点的开发任务或者只能以一种很low的方式来实现一些功能。显然,这些人是无法适应.NET Web开发浪潮的。所以我决定针对公司真实项目用到的ASP.NET MVC技术写一本书,以供打算从事.NET Web开发、无MVC项目经验、MVC不熟或者打算提升.NET Web开发水平的读者学习参考,以便快速适应工作。我是自学.NET的,翻阅过国内外.NET电子书不下百本,感觉书本上说的和企业里面用的完全是两码事。作为一线码农,我希望可以同大家分享工作当中真正有用的知识、技术及技巧。

本书以符合初学者思维的方式,系统地介绍ASP.NET MVC的应用技巧,并结合实际项目详细地介绍如何基于ASP.NET MVC构建企业项目。通过本书的学习,读者可以全面掌握ASP.NET MVC的开发,并可以从代码中获取软件开发与架构设计的经验与灵感。

本书适合ASP.NET MVC的初学者,欲深入了解ASP.NET MVC开发的软件工程师、系统架构师和软件工程师,以及任何对ASP.NET MVC相关技术感兴趣的读者。书中所载技术均为一线城市中互联网企业所流行的.NET Web开发技术,具有很强的参考价值。

本书附带源代码,以供读者参考,便于理解书中的内容,下载地址(注意数字和字母大小写)为:

http://pan.baidu.com/s/1dE8X0gp(密码:4gce)

如果下载有问题,请电子邮件联系booksaga@163.com,邮件主题为“ASP.NET MVC企业级实战”。编者2017年2月第1章MVC开发前奏

俗话说:“工欲善其事,必先利其器”,在进行ASP.NET MVC开发前,我们有必要安装好开发工具、配置好开发环境。

我一向认为程序员要学会“偷懒”,因为当你想要偷懒就不得不去思考其他高效的解决方案,那么怎样才能偷懒呢?好的开发工具、熟练的开发技巧(快捷键等)、巧妙的解决方案等将能有助于我们偷懒,学会偷懒才能高效地工作,当然也不能误解“偷懒”。有些人喜欢不写注释(如果能做到代码即注释例外);做数据迁移的时候喜欢直接运行工具生成的一系列单条insert的SQL脚本,懒得去把脚本修改成批量插入,几十万条记录就这么一条一条插入,一运行就是好几个小时,而修改成批量可能就几分钟,修改后批量插入可能就几十秒;喜欢随意复制粘贴代码,又懒得去做重构……这样就走偏了。1.1 开发环境搭建1.1.1 操作系统和开发工具

本书中所使用的开发系统和软件版本如下所述。

1.Windows 10 64bit

如果你使用的是Windows 7系统,本书云盘提供系统激活软件HEU_KMS_Activator_v7.8.6.exe,当然你也可以使用该软件激活office产品。目前许多互联网公司的开发系统已经是Windows 8和Windows 10。

2.Microsoft Visual Studio Ultimate 2012

下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=30678

在笔者电脑上面安装了VS2012、VS2013、VS2015这3个版本,考虑到目前公司使用的是VS2012,所以本书中所有的示例都采用VS2012。VS2012应该是目前比较主流的.NET开发工具之一,当然也有许多互联网公司已经在使用VS2013甚至VS2015进行开发了,不过使用VS2015作为开发工具的公司目前还是比较少的。即便如此,我们也应该有一个意识,那就是软件系统的升级是一种趋势,相比于一线城市,二三线城市开发工具和开发技术的升级相对较慢。从以前的VS2003到VS2005,再到VS2008,微软基本上是两年更新一次VS版本,再看现在的VS2012、VS2013,发现微软的VS产品迭代更新的周期减少了,VS的每一次升级都是在不断地优化和持续改进,并随之新增一些功能。

3.SQL Server 2012

下载地址:http://www.msdn.hk/7/177/

当前市面上的主流版本是SQL Server 2008R2和SQL Server 2012,而使用SQL Server 2014和SQL Server 2015来开发的公司相对较少,因为SQL Server不便宜,而且版本越高价格越贵。(以前公司买过一张SQL Server 2012的正版光盘,50多万。)

4.MySQL5.6

下载地址:http://www.mysql.com/products/

本书中使用的是MySQL5.6,不是最新版本,云盘中提供了MySQL安装包mysql5.6.msi和Mysql数据库管理工具Navicat for MySQL。

安装顺序:先安装mysql5.6.msi,然后解压Navicat for MySQL.zip,运行navicat.exe。

当然,对于这些开发工具,大家都可以直接百度一下,然后选择自己想要的版本进行下载,尽量不要低于这些软件版本。不过为了减少差异性、方便大家学习,大家最好安装和本书中一样的软件版本。关于开发工具的具体安装细节,由于没有什么技术含量,而且篇幅有限,这里就不做过多介绍了,大家可以从网上查找到大把的软件安装图解教程。

5.Git

Git是Linux的第二个伟大作品。2005年BitKeeper软件公司对Linux社区停止了免费使用权,Linux迫不得已自己开发了一个分布式版本控制工具——Git诞生了。

目前Git越来越火,使用Git作为版本控制的公司也越来越多,所以我们有必要掌握Git的使用。但是Git的学习成本相对较高,尤其是那些抓狂的命令。如果你觉得这样的命令操作起来很烦琐,习惯了过去TortoisSVN乌龟壳式的可视化客户端工具,那么你也可以下载Git的可视化客户端工具。因为笔者的电脑是64bit的,所以这里只提供64bit的下载(TortoiseGit_1.8.9.0_x64.zip),同时提供SourceTree这款Git可视化操作工具的安装包(SourceTreeSetup_1.4.0.zip),你可以根据个人喜好安装使用。安装方法是先安装Git-1.9.4-preview20140815.exe,再安装可视化操作工具。

6.Reflector

Reflector是由微软员工Lutz Roeder编写的免费程序。Reflector的出现使.NET程序员眼前豁然开朗,因为这个免费工具可以将.NET程序集中的中间语言反编译成C#或者Visual Basic代码。除了能将IL转换为C#或Visual Basic以外,Reflector还能够提供程序集中类及其成员的概要信息、查看程序集中IL的能力以及对第三方插件的支持,名副其实的.NET开发神器。安装后,可以直接在VS中查看程序集源码,使用非常方便。

本书源码中提供了Reflector,安装Reflector之后,在VS中鼠标定位到.NET类库中的类或者方法、属性上面后,按F12还可以直接在VS中查看其源码。提示所有软件安装包都会放在云盘中的“各种开发工具”目录下面。1.1.2 开发环境配置

软件安装好了,接下来就是对软件进行配置了。这里只讲一下VS2012的配置,因为VS2012在开发中用得最多且最频繁。

1.显示行号

打开VS,选择“工具→选项→文本编辑器→所有语言”,在右侧“显示栏”中勾选“行号”复选框,如图1-1所示。图1-1

显示行号可以方便我们今后在开发过程中快速定位代码行。例如,使用火狐中的Firebug调用CSS样式的时候是可以看到样式所在行的,当我们调好样式后,可以把修改后的样式直接更新到CSS样式文件中;又或者当程序出现异常时,会看到异常显示某一行报错,我们可以使用Ctrl+G快捷键快速定位到某一行;还有就是解决代码冲突的时候,也能很直观地看到代码冲突的位置。

2.设置屏幕保护色

像咱们软件开发人员,每天长时间对着电脑屏幕,不可避免地会遭受屏幕辐射所带来的视力问题,并引起眼睛的不适,我们可以通过设置保护色来缓解显示屏给眼睛带来的刺激。

打开VS,选择“工具→选项→环境→字体和颜色→项背景→自定义”,设置“R:204,G:232,B:204”,如图1-2所示。图1-2

3.为VS2012添加背景和皮肤

每天对着电脑用VS进行编码开发难免有点单调。我们可以试着像设置电脑桌面壁纸一样设置VS皮肤,而且背景界面可以轮换,从此不再孤单!不过建议背景图片颜色最好比较单一,而且是浅色系,以免影响阅读代码,当然,我们也可以适当调节背景图片的透明度。

我们先看一下效果,如图1-3所示。图1-3

操作步骤:(1)打开VS2012,选择“工具→扩展和更新”菜单,如图1-4所示。图1-4(2)选择联机,搜索并分别安装如下两个插件(见图1-5)。● Visual Studio 2012 Color Theme Editor:修改编辑器背景颜色。● IDE Text Background:修改编辑器背景图片,支持轮播。图1-5(3)安装完成后打开“我的文档”,找到文件MaxZhang.VsixTheme.ini,右击,选择“编辑”命令,设置ImageDirectory属性,指定背景图片存放路径(ImageDirectory=C:\Users\Administrator\Pictures),如图1-6所示、图1-7所示,那么这一组图片将会自动成为VS的背景图片,并定时轮播。如果要改变背景图片的透明度,可以修改配置属性ImageOpacity=0.60的值,然后重启VS。图1-6图1-7(4)重启VS,奇迹就出现在你的面前。

安装完皮肤插件后,可以按照如下操作进行皮肤更换,如图1-8所示。图1-8

如果只是想单纯地设置VS背景图片,不需要背景图片自动轮播功能,也可以安装插件ClaudiaIDE。

安装ClaudiaIDE后,禁用插件IDE Text Background(因为这些背景图片插件同时使用会冲突),想要更换背景图片的话,可以按如图1-9所示进行操作。图1-9提示图1-9中的Opacity用来设置图片透明度,取值范围为0~1,值越低越透明。

4.修改VS类模板添加版权注释信息

在开发过程中,经常需要给类或接口添加public修饰符(默认没有)和一些相关的注释信息,这个工作是机械而枯燥的,而这个简单的需求其实是可以通过修改VS自带的类模板来实现的。下面给出详细的修改步骤。(1)笔者电脑上面的VS2012是安装在D盘中的,所以找到目录D:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ItemTemplates\CSharp\Code\2052。如果你电脑上的VS2012默认安装在C盘,那么就要找到目录C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ItemTemplates\CSharp\Code\2052。(2)找到Class、Interface、WebClass这3个目录下面的cs文件后分别打开,并在文件的最前面加上如下代码:(3)在class $safeitemrootname$前面添加public访问修饰符。这样我们每次在VS中新建类的时候,就不需要再手动去类前面添加public修饰符了。1.1.3 VS常用快捷键

快捷键使用得熟练将极大地提高我们的开发效率,所以我们有必要记住开发中常用的快捷键。VS中一些常用的快捷键如下:● F4:打开属性面板。● F5:调试。● Ctrl+F5:直接执行不调试。● F9:设置、切换断点。● F10:逐过程。● F11:逐语句。● F12:转到定义。● Alt+F12:查看定义。● Ctrl+F:查找。● Ctrl+A:全选界面代码。● Ctrl+K+Ctrl+K:设置书签。● Ctrl+K+Ctrl+N:跳转到下一个书签。● Ctrl+K+Ctrl+F:格式化选中代码。● Ctrl+K+Ctrl+S:外侧代码,如添加#region等。● Ctrl+R+Ctrl+E:封装字段。● Ctrl+R+Ctrl+M:提取方法。● Ctrl+R+Ctrl+I:提取接口。● Shift+Alt+F10,然后按回车键:添加命名空间引用。● Shift+Home:选中当前行。● Shift+方向键:向各个方向选中。1.1.4 VS技巧

1.回到上一个光标位置● 使用Ctrl+-组合键表示Navigate BackWard。● 使用Ctrl+Shift+-组合键表示Forward。

2.删除多余的using指令并排序

当我们新建一个类的时候,Visual Studio会将常用的命名空间用using放在类的头部。当写完一个类的时候,有些using将是多余的,删除多余的using,再排一下序,可以使代码看起来更清晰。VS2012已经为我们做好了这一切。在代码编辑区右击,可以看到“组织using”菜单,这就是我们需要的了。

3.复制或删除一行代码时不用先选中

如果想复制一行代码,只需要简单地按Ctrl+C组合键,然后按Ctrl+V组合键粘贴就可以了,而不需要选择整行的代码。如果想删除一行代码,只需按Ctrl+X组合键就可以了。

4.取代其他编辑器里Ctrl+F更方便的增量查找方法

Ctrl+F的查找功能相信大家都用过,其实在VS里还有更方便的查找功能。操作方法如下:(1)按Ctrl+I组合键。(2)输入要搜索的文本。注意:这时你会看到光标跳至第一个匹配的地方,匹配的文本高亮显示。(3)再次按下Ctrl+I组合键,光标将跳至下一个匹配的文本。(4)按Ctrl+Shift+I组合键可向后搜索。(5)要停止搜索,按Esc键。

5.如何在编辑器中进行框式选择

你是否知道VS提供了流式和框式两种不同的选择模型?大家应该都熟悉流式选择模型了,只要使用Shift+方向键即可(或者使用鼠标进行选择)。

框式选择允许你同时对行和列进行选择。只要同时按下Shift+Alt+方向键,你就了解它的不同之处了。剪切、复制、粘贴这些功能都能使用,只是需要记住从哪里开始选择的。提示也可以使用鼠标+Alt键完成该操作。有时候我们复制网上的代码时会将行号一起复制过来,使用框式选择可以只选择行号部分并将其删除。

6.如何使用快捷键在当前代码行的上面或下面插入一行

使用Home或End,然后使用方向键,再使用回车键就能达到上面的效果。

7.安装之后将IDE设置恢复到默认设置

如果IDE的设置在任何先前发布的版本中做了更改,那么它们都应该被恢复到默认设置。可以在VS2012中选择“工具(Tools)→导入导出设置向导(Import and ExportSettings...)→重置所有设置(Reset all settings)”,此外还有一些导入(Import)和导出(Export)的选项可用。

8.通过按两次Tab键插入代码块● 在编辑器中输入代码片段,比如“for”。● 在这个状态下按两次Tab键将会插入代码块。提示这样既快又不容易出现语法错误。

9.使用Ctrl+Tab组合键打开IDE的导航,获得鸟瞰视图

同时在VS中导航到所有打开的文件和工具窗体,按Ctrl+Tab组合键,打开IDE导航窗口,按住Ctrl键,同时用方向键或鼠标选中一个文件或工具窗体来激活。提示这时最好不要松开Ctrl+Tab组合键,按方向键看鸟瞰图,全部松开后就定位到需要的文件或工具窗体。说实在的,这个窗口挺酷的。

10.查找匹配的标记

某些标识总是成对出现的。例如,“{”标识必须用对应的“}”标识关闭。虽然单击一个“{”,和它匹配的“}”就会高亮显示,但是代码过长的话就不好找了。同样,编译器指示符“#region”必须有对应的“#endregion”指示符。当导航代码时,有时需要查找对应的标识,可以通过按Ctrl+]组合键完成。这个快捷键只有当光标在这些标识符的任何一个下面时才起作用,将会立即跳转到对应的标识符而不管它是开的还是闭的标识。

如果想显亮两个匹配的标识之间的所有代码,可以按Ctrl+Shift+]组合键显亮整个块,并移动光标到开的标识处。这个快捷键只有当光标在任意标识的下面时才起作用(如光标在区域内将不会起作用)。

11.添加命名空间引用

平时我们添加命名空间引用时,要么是直接手写,要么是用鼠标双击类,然后单击下拉框进行引用的,其实我们可以直接按Shift+Alt+F10组合键,然后按回车键就可以了。

12.创建类的快捷方式

用鼠标选中需要创建快捷方式的类,然后同时按Shift+Alt组合键,并拖动到指定位置就可以了。1.2 常用辅助开发工具介绍1.2.1 Firebug图1-10

Firebug是一个开源的Web开发工具,是网页浏览器Mozilla Firefox下的一款开发类插件,现属于Firefox的五星级强力推荐插件之一。Firebug集HTML查看和编辑、Javascript控制台、网络状况监视器于一体,是开发JavaScript、CSS、HTML和Ajax的得力助手。Firebug如同一把精巧的瑞士军刀,从各个不同的角度剖析Web页面内部的细节层面,给Web开发者带来很大的便利。当然谷歌和IE也都自带Web开发工具,可以根据个人喜好选择一款熟练使用,不过笔者非常热衷于使用Firebug。Firebug并不是火狐浏览器独有的,可以在任意支持Firebug的浏览器上面安装。

Firebug也是一个除错工具。用户可以利用它除错、编辑甚至删改任何网站的CSS、HTML、DOM以及JavaScript代码,还可以在火狐浏览器中直接安装Firebug插件,如图1-10、图1-11所示。图1-11

安装后重启Firefox浏览器,就可以在Firefox浏览器中看到Firebug的图标,如图1-12所示。单击Firebug图标(位于Firefox浏览器右上角)或者按F12键即可激活Firebug插件。图1-12

接下来我们介绍一下Firebug的功能。Firebug有5个主要的Tab按钮,这里将主要介绍这几方面的功能。(1)控制台

控制台如图1-13所示。图1-13(2)HTML

利用Inspect检查功能,我们可以用鼠标在页面中直接选择一些区块,查看相应的HTML源代码和CSS样式表,真正做到所见即所得。如果你使用外部编辑器修改了当前网页,可以单击Firebug的reload图片重新载入网页,它会继续跟踪之前用Inspect选中的区块,方便调试,如图1-14所示。图1-14(3)DOM

该功能主要用于查看页面DOM信息,通过提供的搜索功能实现DOM的快速准确定位,并可双击实现DOM节点属性或值的修改,如图1-15所示。图1-15(4)脚本(Javascript)

脚本功能主要是一个脚本调试器,可以进行单步调试、断点设置、变量查看等功能,同时通过右边的监控功能来实现脚本运行时间的查看和统计,提高运行效率,如图1-16所示。图1-16(5)网络(Net)

该标签功能主要用来监控网页各组成元素的运行时间信息,方便找出其中运行时间较慢的部分,进一步优化运行效率,如图1-17所示。图1-171.2.2 HttpRequester

HttpRequester是一款接口的测试工具,和Firebug一样可以在火狐浏览器中通过附加组件的形式进行安装,如图1-18~图1-20所示。图1-18图1-19图1-20

可以模拟各种请求方式,并且可以自定义添加需要提交的请求报文和请求头信息。另外,还有很多的功能,希望大家多去尝试,这里只是为了抛砖引玉。当我们开发Wcf和WebAPI程序的时候,这个插件非常有用。1.3 知识储备1.3.1 必备知识介绍

在学习ASP.NET MVC之前,要有C#、ADO.Net、SQL、HTML、CSS、javascript、Jquery、ASP.NET WebForm的基础,那些所谓零基础快速精通ASP.NET MVC的都是假的。没有扎实的基础,即便教会了精妙的剑招,耍出来也不会有什么杀伤力,反之,如果基础够扎实、内功够深厚,哪怕简简单单、平平无奇的一招也能有势不可挡的威力。1.3.2 树立软件开发信心

在正式学习软件开发之前,你一定要树立信心,相信自己一定可以学会、可以学好,这样在遇到困难的时候才能坚持下去,毕竟求知之路较长,每当快坚持不下去的时候要学会安慰自己——有许多梦想总是遥不可及的,除非你坚持。

有人说,程序是由数据结构和算法组成的,所以数据结构和算法非常重要,大学里面学的C语言和高等数学课程必须要学好;还有人觉得软件开发适合理工专业的人,学文科的不适合做软件开发……

数据结构和算法是很重要,但是并不是一定非得数据结构和算法学得很熟才能胜任软件开发工作,算法除了做游戏开发和搜索引擎等少数开发方向用得比较多以外,做一般的软件开发很少用到,更多的是侧重于应用型开发,说白了就是熟练工种,也难怪许多程序员自嘲为码农、搬砖工。算法的重要性显得并不是那么重要,更重要的反倒是面向对象的思想,因为大家使用的是C#这样的面向对象的高级语言。数据结构的话,做一般的应用开发知道基本原理和怎么用就可以了,不一定非要钻得很深。当然,算法和数据结构学得好,对做开发还是大有裨益的。对于数据结构和算法,能学好最好,学不好也没关系。

学做软件开发和学武是一样的,除了勤学苦练、多思考之外,没有捷径,如果硬要说捷径,那就是编程、编程再编程。要知道,看一遍跟自己做一遍的效果是完全不同的。看一遍往往一觉醒来就忘了,但是自己动手做一遍就会记得深一点,如果再思考总结过,印象就更深了,若是被深深地坑过,那么恭喜你,很长一段时间都不会忘记了,以后也很难犯同样的错误。

人与人之间的IQ差距不会太多,如果不幸低于平均IQ、悟性差,那就只能像郭靖一样以勤补拙了。我相信,如果你能大学毕业,就说明IQ没有问题,既然IQ没有问题,那学软件开发也就不存在任何问题了,前提是你肯学。

我一直觉得学软件开发无外乎三板斧:一抄,二仿,三思考、创新、钻研+总结。最终目标是青出于蓝而胜于蓝。

最后,做软件开发的并不只有做技术这一条出路。在职业生涯中,我们会遇到各种机会和挑战,不要把自己框死在just do coding上,先学做人,再学做事,要学会与人打交道,而不是只和机器打交道。1.4 C#语法新特性

在学习ASP.NET MVC之前,有必要先了解一下C#2.0~C#4.0版本所带来的新的语法特性。这一点尤为重要,因为在MVC项目中我们利用C#的新特性将会大大提高开发效率;同时,在MVC项目中随处可见C#新特性的身影。其实,其本质都是“语法糖”,由编译器在编译时转成原始语法。1.4.1 C#2.0新特性

1.泛型(Generics)

微软官方定义:2.0版C#语言和公共语言运行时(CLR)中增加了泛型。泛型将类型参数的概念引入.NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。

下面给出一个简单的泛型例子:

其中,T就是System.Collections.Generic.List实例所存储类型的占位符。当定义泛型类的实例时,必须指定这个实例所存储的实际类型:

泛型允许程序员将一个实际的数据类型规约延迟至泛型的实例被创建时才确定。泛型主要有两个优点:● 编译时可以保证类型安全。● 不用做类型装换,获得一定的性能提升。

2.泛型方法、泛型委托、泛型接口

除了泛型类之外,还有泛型方法、泛型委托、泛型接口:

3.泛型约束(constraints)

可以给泛型的类型参数上加约束,要求这些类型参数满足一定的条件,如表1-1所示。表1-1 泛型的类型参数

4.部分类(partial)

在申明一个类、结构或者接口的时候用partial关键字可以让源代码分布在不同的文件中。过去部分类是为了在ASPX页面和ASPX.cx页面进行Code-Behind的。在EF中使用T4模板自动生成代码的时候部分类的作用非常重要。

部分类仅是编译器提供的功能,在编译的时候会把partial关键字定义的类合在一起去编译。

5.匿名方法

匿名方法的本质其实就是委托,函数式编程的最大特点之一就是把方法作为参数和返回值。ConsoleWrite→MulticastDelegate(intPtr[])→Delegate(object,intPtr)匿名方法:编译后会生成委托对象,生成方法,然后把方法装入委托对象,最后赋值给声明的委托变量。匿名方法可以省略参数:编译的时候会自动为这个方法按照委托签名的参数添加参数。1.4.2 C#3.0/C#3.5新特性

1.自动属性

这个概念很简单,简化了我们在做C#开发的时候手写一堆私有成员+属性的编程方式,我们只需要使用如下方式声明一个属性,编译器就会自动生成所需的成员变量。

回顾一下传统属性概念,属性的目的一是封装字段,二是控制读写权限及字段的访问规则(如年龄、生日范围),平时主要是用来封装读写权限。

我们来看一下基本用法:

在C#3.0之前,我们是这样来实现属性的:

读者可以思考一下:使用自动属性的话程序员写的代码少了,机器做的事情就多了,那我们到底要不要使用它?

如果是针对读写权限的封装,就推荐使用,因为它是在编译的时候产生了负担,并不是在运行的时候,所以不会影响客户运行程序时的效率!但是编译时生成的代码也有一个显而易见的缺点,语法太完

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载