ASP.NET 4.0 MVC敏捷开发给力起飞_第1页
ASP.NET 4.0 MVC敏捷开发给力起飞_第2页
ASP.NET 4.0 MVC敏捷开发给力起飞_第3页
ASP.NET 4.0 MVC敏捷开发给力起飞_第4页
ASP.NET 4.0 MVC敏捷开发给力起飞_第5页
已阅读5页,还剩207页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ASP.NET4.0MVC敏捷开发给力起飞注:因内容过长上传受限制,本文档只显示部分内容,完整版文档请下载此文档后留言谢谢。目录\h第1章ASP.NET的世界\h1.1ASP.NET的来世今生\h1.1.1ASP.NET技术及其发展过程\h1.1.2ASP.NET设计目标\h1.2ASP.NET的第一堂课\h1.2.1ASP.NET控件概述\h1.2.2HelloASP.NET\h1.3伴您成长\h1.3.1您从本章学到了什么\h1.3.2蛋糕加点奶油,咖啡加点糖\h1.3.3下一步做什么\h第2章ASP.NET编程基础\h2.1兵器篇——.NET集成开发环境VisualStudio2010\h2.1.1VisualStudio2010的安装\h2.1.2常用功能窗口介绍\h2.1.3帮助系统\h2.2内功篇——C#语言基础\h2.2.1C#简介\h2.2.2C#的数据类型\h2.2.3变量和常量\h2.2.4流程控制\h2.2.5C#面向对象编程\h2.2.6C#4.0新特性\h2.3.NET框架\h2.3.1公共语言运行时(CLR)\h2.3.2微软中间语言(MSIL)\h2.4.NET框架4.0新特性\h2.5伴您成长\h2.5.1您从本章学到了什么\h2.5.2蛋糕加点奶油,咖啡加点糖\h2.5.3下一步做什么\h第3章ASP.NET与数据库\h3.1数据库技术\h3.2数据库产品\h3.2.1SQLServer\h3.2.2Access\h3.3ADO.NET数据访问\h3.3.1数据访问概述\h3.3.2ADO.NET\h3.4数据访问控件\h3.4.1数据源控件\h3.4.2数据绑定控件\h3.5伴您成长\h3.5.1您从本章学到了什么\h3.5.2蛋糕加点奶油,咖啡加点糖\h3.5.3下一步做什么\h第4章LINQ技术\h4.1LINQ基础\h4.1.1什么是LINQ\h4.1.2LINQ功能构建模块简介\h4.2LINQ详细介绍\h4.2.1LINQToObjects\h4.2.2LINQToSQL\h4.2.3LINQToXML\h4.3ADO.NETEntityFramework\h4.3.1ADO.NETEntityFramework简介\h4.3.2LINQToEntities\h4.4LINQ数据映射\h4.4.1表和实体类\h4.4.2字段和属性\h4.4.3实体类关联\h4.4.4数据访问\h4.5LINQ与存储过程\h4.6LINQ并发与事务处理\h4.6.1并发问题\h4.6.2事务处理\h4.7伴您成长\h4.7.1您从本章学到了什么\h4.7.2蛋糕加点奶油,咖啡加点糖\h4.7.3下一步做什么\h第5章ASP.NETMVCFramework\h5.1MVC基础\h5.1.1什么是MVC\h5.1.2MVC特性\h5.2ASP.NETMVC介绍\h5.2.1ASP.NETMVC:模型(Model)\h5.2.2ASP.NETMVC:视图(View)\h5.2.3ASP.NETMVC:控制器(Controller)\h5.2.4MVC设计模式的扩展\h5.3ASP.NETMVC详细内容\h5.3.1URL路由规则\h5.3.2了解控制器类\h5.3.3Action方法及参数\h5.3.4视图引擎\h5.3.5模型与数据库\h5.3.6参数传递\h5.4ASP.NETMVC举例\h5.4.1创建ASP.NETMVC项目\h5.4.2在控件器中添加Action方法\h5.4.3添加视图\h5.4.4编译运行\h5.5伴您成长\h5.5.1您从本章学到了什么\h5.5.2蛋糕加点奶油,咖啡加点糖\h5.5.3下一步做什么\h第6章实例:用LINQ和MVC开发网上商店\h6.1创办网上商店\h6.1.1给网店取个名——灵客\h6.1.2灵客有什么功能\h6.1.3让我们开始吧\h6.2开始编程,跑起来再说\h6.2.1创建ASP.NETMVC应用程序\h6.2.2创建数据库\h6.2.3跑起来再说\h6.3商品维护\h6.3.1创建Product表\h6.3.2添加LINQ类\h6.3.3商品维护\h6.3.4给Product表添加字段\h6.4东西有点乱,来个分类显示\h6.4.1添加Category表,更新LINQ类\h6.4.2添加分类\h6.4.3分类显示商品\h6.5东西太多记不住,让购物车来帮您\h6.5.1创建购物车\h6.5.2将东西放入购物车\h6.5.3查看购物车内的东西\h6.6买了东西总要付钱吧\h6.6.1获得订单\h6.6.2在付账页面显示购物车中的内容\h6.7帮您把东西送到家\h6.7.1查看发货订单\h6.7.2设置发货状态\h6.8给商店请个管家\h6.8.1添加管理员和用户注册\h6.8.2前台用户登录控制\h6.8.3后台管理员登录控制\h6.9伴您成长\h6.9.1您从本章学到了什么\h6.9.2蛋糕加点奶油,咖啡加点糖\h6.9.3下一步做什么\h第7章实例:用LINQ和MVC开发博客系统\h7.1关于博客\h7.1.1现实中的博客\h7.1.2关于博客的开发\h7.2从分析做起\h7.2.1使用场景分析\h7.2.2实体分析\h7.3设计\h7.3.1架构设计\h7.3.2存储设计\h7.3.3功能设计\h7.4实现\h7.4.1建立项目\h7.4.2建立数据库\h7.4.3生成MVC模型\h7.4.4编写控制器并建立视图\h7.5伴您成长\h7.5.1您从本章学到了什么\h7.5.2蛋糕加点奶油,咖啡加点糖\h7.5.3下一步做什么\h附录AASP.NET学习资源\h附录BSQLServer2005安装指南\h附录C.NET框架类库介绍\h附录D如何保护ASP.NET应用程序\h附录EPetShop解析第1章

ASP.NET的世界众所周知,Internet已经渗入到人们生活的每一个角落,世界因Internet而变小。不知道从什么时候起,人们已经习惯了从网络中去了解、认识这个世界。很难想象,如果突然失去了网络,世界将会发生什么样的改变。人们在学习一项新知识的时候,往往会为自己制定一个学习目标,而不是漫无目的地游走于知识的沙漠。在本书的学习过程中,笔者将陪伴读者一起从ASP.NET的基础出发,点点滴滴逐步积累,以构建一个基于ASP.NETWeb技术的网上商店系统和一个基于ASP.NETMVC技术的网络博客系统作为本书ASP.NET之旅的目的地。通过这个边动手边学习的过程,读者将能熟练地掌握ASP.NET开发所需的基础知识,并能学会如何开发自己的Web应用程序。要学习好一门软件开发技术或者语言,首先应该是对这门技术有一个总体的认识,知道它能做什么,然后才是怎么做的问题。因此,本章作为本书的第1章,将首先为读者介绍ASP.NET技术的发展情况,让读者对ASP.NET有一个总体的认识。通过阅读本章,读者还将了解到ASP.NET技术的设计目标,知道使用ASP.NET能够开发出什么样的软件系统,并将在本章的引导下亲自实现一个使用ASP.NET技术开发的“HelloWorld”Web应用程序。接下来,就请读者跟随笔者一起漫游ASP.NET的世界,开始ASP.NET之旅。1.1ASP.NET的来世今生小提示“ASP.NET到底是什么?我能用它来做些什么的呢?它和以前的ASP之间有什么关系?……”对于经常在网上购买书籍的读者,一定不会对“当当网”感到陌生,是的,“当当网”就是采用了ASP.NET技术开发构建的。当然,作为ASP.NET的创始者——Microsoft公司旗下的绝大多数网站也都是采用ASP.NET技术开发的。不仅如此,如今很多互联网网站以及面向企业的Web应用系统都采用了ASP.NET技术,ASP.NET已经成为Web开发领域中最为重要的力量之一,它最明显的标志就是Web页面的后缀名为aspx。同时,Microsoft公司为开发人员使用ASP.NET进行Web开发提供了大量的工具和技术支持,并且学习ASP.NET技术的门槛非常低,使得初学者能够很快地掌握基本的Web开发技术,使开发人员能够快速地、便捷地实施开发。有了Microsoft这个软件业界巨人的支持,以及我们身边很多成功实施的案例,无一不证明选择ASP.NET来进行Web开发的正确性。在开始学习ASP.NET之前,读者还是需要对ASP.NET技术的发展过程有一个大概的了解。下面的两小节就会解开ASP.NET的身世之谜。1.1.1ASP.NET技术及其发展过程ASP.NET是大名鼎鼎的Microsoft公司推出的一款以.NETFramework为基础平台的动态Web开发技术。Microsoft公司将传统的ASP(ActiveServerPages)动态Web开发技术与.NETFramework相结合,使得开发人员能够快速、高效、敏捷地开发出可靠的Web应用程序。同时,ASP.NET也并不是ASP的简单升级,它使用.NETFramework中的各种服务器端编译型语言,例如C#,VB.NET等,并支持WebForm、.NET服务器控件、ADO.NET、LINQ等高级特性。随着Microsoft公司不断地对.NET平台进行扩充和完善,如今的ASP.NET已成为Web开发领域最重要的服务器端平台技术之一。一口气说了这么多,读者也许晕头转向、不甚明白。没关系,读者现在只需要知道ASP.NET是一项以.NETFramework为基础的Web开发技术就可以了,其余的内容就在本书的带领下,慢慢领会吧。不用问,读者的下一个问题肯定是:什么是.NETFramework呢?.NETFramework是Microsoft为开发应用程序而创建的富有革命性的新平台。.NETFramework可以创建Windows应用程序、Web应用程序(当然是指ASP.NET)、Web服务和其他各种类型的应用程序。似乎越说越复杂了,那仍然请读者将这个概念暂时抛到一边,就记住开发ASP.NET要借助一个叫.NETFramework的东西吧,其他的还是交给本书后面的学习。最新的.NETFramework版本是.NETFramework4.0,Microsoft公司为它进一步改进和添加了控件,并新加入了LINQ技术、SEO(SearchEngineOptimization,搜索引擎优化)和输出缓存等新功能,本书的介绍也将基于这个最新版本。1.1.2ASP.NET设计目标随着以Internet和局域网为代表的网络技术的不断发展,以B/S(Browser/Server)模式架构的分布式应用逐步与C/S(Client/Server)模式架构并驾齐驱,并在系统应用中显示出了越来越重要的作用。另外,现在业界引起广泛讨论和关注的“云计算”概念的提出,使得Web开发,特别是Web2.0进入了一个全新的时代。因此,不论是企业级的Web应用程序,还是各种类型网站的Web开发,已经成为了软件开发人员的一项重要工作和研究方向。正是在这样巨大的市场需求推动之下,.NET平台及其ASP.NET技术得到了长足的发展和广泛的应用。敏捷,是现代软件开发的新思想。所谓敏捷开发,就是以尽可能简单的方式,通过对团队有效的组织,以业务需求为驱动,尽早并持续性地交付有价值的软件让客户满意。ASP.NET的各个版本均是以简化开发人员的工作为设计目标的核心,并不断创新和丰富其自身内容,使开发人员能在最短的时间内开发出优秀的Web应用程序。作为最新版本的ASP.NET4.0对以前版本做出了进一步的扩充,为开发人员提供了强大的功能。ASP.NET将许多后台代码进行了封装,大大提高了开发效率,使开发人员可以将更多的注意力集中到业务逻辑的实现上去,改变了以前需要编写许多复杂的底层代码的状况。并且,随着.NET平台和ASP.NET版本的不断更新,对项目和代码的管理维护工作也变得更加容易。性能,是关系到一个项目成败的关键因素,Microsoft公司的技术人员通过优化.NET内部的处理机制,扩展高速缓存机制,并在.NET2.0版本增加了对64位服务器的支持,充分提升了ASP.NET的性能,以适应企业级的需求。总之,ASP.NET的设计目标就是为开发人员提供最为简化的开发技术和平台,为快速实现业务的开发提供支持。休息一下如果读者是一位软件开发的初学者,或许对以上提到的C/S模式、B/S模式、高速缓存机制等术语还不太熟悉,对ASP.NET和.NET也会感到很陌生。其实,这并没有关系,读者只需要对以上提到的内容有一个初步的印象就可以了。回顾笔者学习软件开发的经历,在第一次接触到C++的时候,同样对宏、头文件、指针等概念一头雾水,当时只能将这些术语默默记在脑中,随着学习的深入和不断的探索、应用,回过头来再看到这些术语时,看似神秘的面纱已经不在了。最开始学习编程的时候总是比较枯燥的,放松一下心情,窗外的阳光很灿烂。1.2ASP.NET的第一堂课在对ASP.NET的发展过程和其设计目标有了初步认识之后,读者一定迫不急待想要亲自尝试一下,比如开发一个小小的ASP.NET程序。不过,在这之前,读者还需要先来认识一下开发ASP.NETWeb应用程序会用到的一些常用控件,这些控件在今后的实际开发中会频繁用到。1.2.1ASP.NET控件概述ASP.NET控件是一组可以复用的组件,.NET为我们提供了各种功能的控件。如图1-1所示,它们可以是呈现在浏览器端的Web页面元素,可以是诸如SqlDataSource,LinqDataSource等的数据访问控件,也可以是Web页面验证控件等。控件可以响应事件,获取或者设置属性,大多数控件都是在服务器端进行处理的。在此,首先介绍一下标准的服务器端Web控件。图1-1.NET功能控件Web服务器控件主要有两种类型:标准的Web控件和HTML服务器控件。其中,HTML服务器控件是指添加了runat="server"属性的HTML元素,例如<inputrunat="server"/>;而Web控件是指标记类似于<asp:button/>的Web服务器控件,本节主要介绍服务器端Web控件。在一个Web页面中,按钮(Button)、下拉菜单(DropDownList)、文本框(TextBox)和图片(Image)是最为常见的元素。用户使用这些Web页面元素进行数据的读取、输入和事件的触发。在ASP.NET中,VisualStudio开发平台为用户提供了这些常用的Web控件,它们位于工具箱中,如图1-2所示。图1-2工具箱中的Web控件读者可以用鼠标将工具栏中的控件拖放至设计窗口中,VisualStudio会自动生成相应的HTML标签。表1-1中列举了一些最常用、最简单的Web控件。表1-1常用的Web控件控件有着各种属性,以Button控件的部分常用属性为例对其进行说明,如表1-2所示。表1-2Button控件的常用属性控件除了上述介绍的属性以外,还包含了若干事件。开发人员定义事件和事件发生时所需执行的代码,然后通过委托机制和事件相绑定。至于什么是委托和事件,稍后为读者介绍。小提示■作为一名使用ASP.NET的Web开发人员,应该熟悉ASP.NET所提供的各个控件的功能和属性,尽管它们中的某些不是十分常用。■开发人员也应该对HTML和JavaScript有充分的了解,因为它们会在开发过程中时常出现。■开发人员应该了解并掌握ASP.NET各个控件的编译、运行状态,对于某些使用HTML客户端控件就能解决的问题,则不应该选用服务器端控件,以便减少服务器的压力。1.2.2HelloASP.NET读者一定是迫不及待地想要亲自编写一段ASP.NET应用程序了,下面就请读者一起来实现一个ASP.NET的“HelloASP.NET”程序。在此之前,读者应当已经成功安装了VisualStudio2010和.NETFramework4.0,不熟悉具体安装过程的读者可以翻到第2章,先阅读安装的介绍。需要注意的是,本书的案例均是以中文版VisualStudio2010TeamSystem作为开发平台的。01新建一个ASP.NET网站。在VisualStudio的菜单中选择“文件”→“新建”→“网站”命令,如图1-3所示。图1-3新建一个网站命令02在新弹出窗口中选择“ASP.NET网站”选项,并在位置文本框的创建路径中将“WebSite1”改为“HelloASP.NET”,语言选择“VisualC#”。表示要以.NETFramework4.0为基础在对应文件系统路径下建立一个叫做“HelloASP.NET”的网站,最后单击“确定”按钮,如图1-4所示。图1-4新建一个网站创建好网站之后,VisualStudio会在网站项目下自动生成一个名为Default.aspx的ASP.NET页面(ASP.NET页面总是以aspx为后缀名),一个Web.Config配置文件和一个App_Data文件夹。可以通过解决方案资源管理器(SolutionExplorer)对项目文件进行查看,如图1-5所示。图1-5解决方案资源管理器03现在可以进行程序的开发了。VisualStudio2010为用户提供了3种不同的视图,分别是“设计”、“拆分”和“源”,读者可以选中“拆分”选项卡,这样就可以同时呈现出页面设计和HTML源两个视图,方便开发人员对页面进行控制。然后,从工具栏中依次选择Label,TextBox和Button控件,拖放入“源”视图中的<div></div>标签内,VisualStudio会自动生成相应的代码,如图1-6所示。图1-6生成代码在“源”视图中,可以清晰地看到上一小节介绍的控件及其属性。例如在Label控件中,其包含了ID属性,并将其设置为Label1,它表明这个Label控件的唯一身份;它还包含了runat属性,说明这个Label控件是一个服务器端的Web控件;最后Label在页面上默认的显示值是Label。04最后对这3个控件进行一个最简单的程序编写。这里要实现的功能就是在TextBox控件中输入“HelloASP.NET”字符串,然后单击Button按钮,让Label控件显示为输入的值。当用户在页面中单击Button按钮时,会触发一个OnClick事件,然后执行相应的后台代码。下面就来示范如何实现这样一个功能。双击“设计”视图里的Button按钮,VisualStudio会在后台CS文件里自动生成一个事件被触发时所执行的方法,用户对事件发生时所要做的操作就写在这个方法里。正如前面所述,当用户在TextBox控件中输入了值,后台程序则获取TextBox控件的文本,将文本赋值给Label控件并做为Label控件显示的值,代码清单如代码1-1所示:代码1-105最后来看看运行的效果,单击工具栏里的“调试”按钮,启动调试。注意,在第一次启动调试时,VisualStudio会弹出如图1-7所示的窗口,提示用户是否在配置文件Web.config里启动调试,这里单击“确定”按钮即可。图1-7进行调试项目通过调试后,VisualStudio会启动浏览器,运行这个ASP.NETWebSite应用程序,结果如图1-8所示。图1-8在浏览器中显示应用程序读者现在可以在TextBox控件中输入“HelloASP.NET”,单击Button按钮,看看Label控件显示的是什么,最终执行效果如图1-9所示。图1-9最终执行效果怎么样?如此简单的一行代码就可以实现前面所描述的需求。是的,ASP.NET就是这么简单!1.3伴您成长1.3.1您从本章学到了什么通过本章的学习,读者了解了.NET和ASP.NET技术的发展过程,知道了ASP.NET技术的设计目标,初步认识了简单的Web服务器控件,并亲自实现了一个HelloASP.NETWeb应用程序,对ASP.NET有了一个初步的印象。正如本章所述,使用ASP.NET就是为了快速、高效、敏捷地开发出Web应用程序。与此同时,作为一个专业的Web开发人员,读者需要掌握的知识还有很多,比如:HTML、CSS、JavaScript、C#服务器端编程技术、数据库技术等,本章所讲述的只是万里长征的第一步。1.3.2蛋糕加点奶油,咖啡加点糖在结束本章之前,笔者再来谈谈ASP.NET的控件。在1.2.1节中,读者仅认识了几个最基本的Web控件,现在就来进一步对控件进行了解。正如本章所述,控件是一组可以复用的组件,而组件是一个自包含的功能单元,拥有独立于内部结构的外部接口,或者可以认为,控件是一组被封装好的黑盒代码,并能按照需求被重复应用于任意多个应用程序中。在.NET中,控件是非常重要的一个概念,.NET不仅仅为开发人员提供了许多内置的服务器控件,还允许开发人员根据自己的具体需求,制定用户控件。关于用户控件,可以将它理解为一个开发人员自定义、封装好的Web窗体,并将该Web窗体用一个后缀名为ascx的文件和对应的CS文件存储起来。用户控件不能作为一个单独的Web窗体来运行,而是将其放入其他的Web窗体来使用,这样就可以实现代码的重用。下面我们就来实现一个简单的用户控件。首先,打开前面已经建立好的HelloASP.NET项目,右击解决方案资源管理器中的项目,单击“添加新项”选项,在弹出窗口中单击“Web用户控件”选项,然后单击“添加”按钮。当然,开发人员也可以为用户控件重命名,但在这里,先使用默认的“WebUserControl.ascx”,如图1-10所示。解决方案资源管理器中会自动生成WebUserControl.ascx和WebUserControl.ascx.cs文件。从工具箱中选择一个Label控件,拖放入WebUserControl.ascx的“源”视图中,更改Label控件的Text属性为“我是用户控件”,并保存。图1-10添加新控件更改当前窗口到Default.aspx的“设计”视图,将刚刚建立的用户控件拖放入页面中,读者可以在“源”视图中看到对用户控件的引用和使用情况,代码清单如代码1-2所示:代码1-2编译并运行该窗体,可以得到最终的实现效果,如图1-11所示,这就是一个简单的用户控件的实现。图1-11实现用户控件1.3.3下一步做什么讲了这么多,读者是否已经感觉到ASP.NET应用程序的开发并不是一件非常复杂的事情?有些性急的读者也许已经急不可耐,想马上进入网上商店站点的开发之中。但是,正如前面所说,ASP.NET是基于.NETFramework的,因此,接下来还应该回归到.NET,只要认真学完本书讲述的这一点C#语言的基础,今后的开发就会得心应手。休息一下在进入下一章之前,读者应当去放松一下,看看其他的书籍,踢一场足球,或者出去和朋友们坐坐、聊天,谈谈今天学习到的ASP.NET,没准他们会认为你很在行,Goodluck。有志向的朋友还可以看看人格心理方面的书,因为软件开发的过程中需要和项目团队成员进行交流,知己知彼,方能百战不殆。总之,笔者推荐读者以劳逸结合的方式来学习本书。第2章

ASP.NET编程基础通过前一章的学习,相信您已经对ASP.NET和VisualStudio2010开发平台有了一个初步的认识,您也许已经希望马上动手开发一个Web应用系统或者网站。不过先不要着急,虽然有这么一个强大的平台,但是没有开发语言的支持也是“巧妇难为无米之炊”。本章首先将带领您一起安装当前最新的.NET开发平台VisualStudio2010,并对该平台的操作进行简单的介绍。然后对该平台支持的程序开发语言C#进行讲解。在这里将对C#基础中最实用的知识点进行介绍,通过通俗易懂的例子介绍C#的语法并展示C#的功能,让您能够快速地掌握这门语言,从而进行.NET平台下ASP.NETWeb应用程序的开发。C#语言目前已发展到4.0版本,它内容丰富、博大精深。对于使用C#语言进行ASP.NET开发的初学者来说,掌握C#语言是很关键的。本章将首先介绍基于C#2.0和C#3.0的基础知识,包括数据类型、变量和常量、流程控制,另外还会介绍面向对象的基础,最后介绍C#3.0/4.0的新特性。当然,对于有使用C#语言开发ASP.NET2.0Web应用程序经验的您可以跳过本章前几节,着重关注C#3.0/4.0的新特性。本章我们还将通过CLR和MSIL展示程序在.NET平台内部运行的实现机制,让您对.NET平台有比较全面的理解,从中体会到这个开发平台的优越性。昨日,伴着深秋的阳光,我们对ASP.NET有了一个初步的认识,您也亲自实现了一个HelloASP.NET的示例程序。俗话说:“磨刀不误砍柴功”,现在就让我们将注意力放回到VisualStudio2010开发平台的安装和使用以及C#语言的基础之上。说到VisualStudio2010和C#语言,浮现在我脑海中的是两个词语——兵器和内功。在武侠小说中,武林高手们各个身怀绝技,他们的神奇经历影响了一代又一代的读者。其中有的人物因为手握威力无比的绝世兵器而威震天下,例如金庸先生笔下的金毛狮王谢逊凭借一把屠龙刀行走江湖,峨嵋派掌门灭绝师太因为倚天剑而名声大震;此外,其他拥有极其高深内功修为的武林高手更是威名远扬,武林大侠郭靖和乔峰的降龙十八掌、英俊小生段誉的六脉神剑,明教教主张无忌的九阳神功,当然不能忘了少林中令人敬仰的扫地僧;更甚者便是集玄铁剑与极高内功修为于一身的神雕侠杨过。如果把我们的程序世界比做武侠小说中的“江湖”,作为“江湖人士”的您肯定希望能够有所作为。下面首先让我们一起挥舞手中VisualStudio2010这件强大的兵器,然后修炼一下C#语言的内功基础,为后面对网上商店系统的实现、为今后的“笑傲江湖”打下坚实的基础。2.1兵器篇——.NET集成开发环境VisualStudio2010日后,当修炼已成的您“行走在江湖之上”时,路人问道:“大侠,您使用的是什么兵器呢?”如果此时您不能准确而精辟地描述出手中是何兵器,那岂不是让人笑掉大牙,因此,还是首先来介绍一下您的兵器——VisualStudio2010吧。VisualStudio2010是Microsoft公司面向Windows7,Office2010以及Web2.0浪潮的新一代开发工具,代号为“Hawaii”。它是对VisualStudio2008开发环境一次及时、全面的升级。先来回顾一下VisualStudio2008的特点:VisualStudio2008在VisualStudio2005的基础上引入了250多个新特性,整合了对象、关系数据及对XML数据的访问方式。使用VisualStudio2008可以高效地进行各种应用程序的开发。设计器中可以实时反应变更,XML、JavaScript中智能感知功能可以提高开发效率。同时VisualStudio2008支持项目模板、调试器和部署程序,可以高效开发Web应用,并集成了ASP.NETAJAX框架,包含了ASP.NETAJAX项目模板。同时使用它还可以高效地进行Office应用和Mobile应用的开发。而VisualStudio2010在VisualStudio2008的基础上又新增了5大特性:支持云计算架构;Agile/Scrum开发方法;搭配Windows7与Silverlight4;发挥多核并行运算威力;更好地支持C++。同时,VisualStudio2010在以下三个方面还进行了突破创新。1.释放创意使用VisualStudio2010,可以使用原型制作、建模和可视设计工具实现您的愿景。创造和分享您的构想并发挥团队的创意力量。创建任何您能想到的功能,打造敏捷的团队,并开创更多的可能性。通过新的原型制作、建模和可视设计工具,您可以为Windows和Web构建创新应用程序;遇见创意设计的力量——与SketchFlow,MicrosoftExpressionⓇStudio共同设计新一代使用体验,并与TeamFoundationServer完美集成;利用多核编程和云开发工具提供的新机遇和功能。2.通过集成实现简化VisualStudio2010是一个集成环境,开发人员可以使用现有技能建模、编码、调试、测试和部署大量应用程序类型。VisualStudio有助于简化常用任务并帮助开发人员深入探索平台。单一集成开发环境进一步考虑了您的技能因素,并按照您的工作方式进行了调整;在不离开VisualStudio2010环境的情况下,完成所有编码、建模、测试、调试和部署工作;利用现有的标准和技能适应日益增多的应用程序类型,包括MicrosoftSharePointⓇ和WindowsⓇAzureTM;通过多屏幕支持,更多的合作伙伴解决方案和功能更强的工具编辑器满足您的多元化工作方式。3.确保代码质量VisualStudio2010提供了强大的工具用于管理项目、维护源代码和发现Bug。测试人员和开发人员可以使用手动和自动测试,以及高级调试工具,确保以正确的方式构建正确的应用程序。具备主动项目管理功能的强大测试工具可帮助您以正确的方式构建正确的应用程序;使用新的IntelliTrace调试程序隔离应用程序历史记录中的故障点;借助主动项目管理工具(包括新报告、仪表板和计划工作表)避免问题的出现;使用手动和自动测试工具了解您是否以正确的方式构建了正确的应用程序。小提示VisualStudio2010包含了4个版本:VisualStudio2010Professional,专业版、VisualStudio2010Premium,企业版、VisualStudio2010Ultimate,旗舰版和VisualStudioTestProfessional,测试人员版等,本书中采用的是VisualStudio2010简体中文旗舰版。因此,建议您也使用这个版本的VisualStudio2010,当然,请支持正版。下面,我们就来看看VisualStudio2010的安装过程。2.1.1VisualStudio2010的安装在安装VisualStudio2010开发工具前最好先安装Internet信息服务(IIS,InternetInformationServer)。问题又来了,那什么是IIS呢?IIS是一种Web(网页)服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。IIS作为当今主流的Web服务器之一,提供了强大的Internet和Intranet服务功能。虽然VisualStudio2010自带了一个Web编译环境,可以把它看做是IIS的一个精简版本,可以用来对开发的程序进行调试,但是最好单独安装IIS,这样可以使用IIS提供的全部功能。1.在WindowsXP操作系统中安装Internet信息服务(IIS)IIS在默认情况下安装在Windows2003Server版本中,其他版本的操作系统可以使用“控制面板”中的“添加或删除程序”来安装IIS或其他组件。安装前在光驱中插入操作系统的安装光盘。01单击“开始”菜单中的“控制面板”命令,进入到“控制面板”窗口中,然后选中“添加/删除程序”选项,打开“添加或删除程序”对话框。02单击“添加或删除程序”对话框中左侧的“添加/删除Windows组件”选项,打开“Windows组件向导”对话框,如图2-1所示。图2-1“Windows组件向导”对话框03选中“Internet信息服务(IIS)”复选框,单击“详细信息”按钮查看安装IIS所需要的组件,如图2-2所示。图2-2Internet信息服务(IIS)子组件04选中需要安装的组件,一般将所有的选项都选中。然后单击“确定”按钮,返回“Windows组件向导”对话框,单击“下一步”按钮,即可开始安装Internet信息服务(IIS),安装界面如图2-3所示。图2-3IIS安装进程05安装完成后,单击“完成”按钮完成IIS的安装过程。2.安装VisualStudio2010旗舰版01将VisualStudio2010安装光盘放入到计算机的光驱中,光盘运行后系统自动进入安装程序界面,如图2-4所示。该界面中共有两个选项,分别是安装VisualStudio2010和检查ServiceRelease。图2-4VisualStudio2010安装程序界面02单击“安装MicrosoftVisualStudio2010”选项,安装程序弹出如图2-5所示的安装向导界面。图2-5VisualStudio2010安装向导界面03单击安装向导中的“下一步”按钮,安装程序转入到安装程序的起始页界面,如图2-6所示。页面左侧显示的是关于安装VisualStudio2010所需的组件信息,右侧显示的是用户许可协议。图2-6安装程序起始页04选中“我已阅读并接受许可条款”单选项,单击“下一步”按钮,进入安装程序的选项界面,如图2-7所示。可以在左侧选择安装的功能,一般情况采用默认的选择,也可以根据计算机存储空间确定产品安装的路径。图2-7安装选项界面05完成功能选择和安装路径的设置后,单击“安装”按钮,进入程序的安装界面,如图2-8所示,页面中显示当前正在安装的组件。图2-8安装进度界面06安装完成后,进入安装程序的完成页面,如图2-9所示。单击“完成”按钮完成VisualStudio2010开发环境的安装。图2-9安装程序完成页面2.1.2常用功能窗口介绍好,在VisualStudio2010安装完成之后,让我们亮出自己的“兵器”,看看它有哪些用途。单击“开始”→“所有程序”→“VisualStudio2010”→“VisualStudio2010”命令,运行VisualStudio2010,开发环境界面如图2-10所示的VisualStudio2010起始页。在这个页面中包括“最近使用的项目”、“VisualStudio指南和资源”和“解决方案资源管理器”等窗体。图2-10VisualStudio2010起始页“最近使用的项目”中包含的项目,为开发人员访问最近编辑过的项目提供一种快捷方式,另外在“最近使用的项目”中还提供“打开项目”和“新建项目”两个功能。“打开项目”可以选择需要打开的C#项目,“新建项目”可以帮助您创建一个新的C#项目。“解决方案资源管理器”主要用于维护和管理当前项目中的文件。单击图2-10中所示的“新建项目…”后会弹出“新建项目”对话框,在其中创建一个新的ASP.NETWeb应用程序。图2-11所示为VisualStudio2010的开发环境界面,Default.aspx为网站默认主页名。图2-11VisualStudio2010开发环境在图2-11中,最上面的是菜单栏,显示了所有可用的操作方式,具体如图2-12所示。图2-12VisualStudio2010菜单栏下面简单介绍菜单栏中重要菜单项的常用功能。●文件:主要提供新建、打开、保存、添加、关闭文件等操作。●编辑:在编辑代码时的一些操作,如复制、粘贴、查找等。●视图:用于显示或隐藏集成开发环境的各种窗口、工具栏以及其他组成部分。●项目:主要用于添加新项、添加现有项、复制网站、添加引用、添加Web引用等操作。●生成:主要用于生成网站、发布网站等操作。●调试:主要用于启动调试、开始执行等操作。●数据:主要用于模式比较、数据比较和T-SQL编辑等操作。●工具:主要用于执行连接到数据库、连接到服务器等命令。●测试:主要用于各种测试操作,如新建测试、加载元数据文件、创建新测试列表等。●分析:主要用于代码的分析,如在网站上进行代码分析、代码分析配置等操作。●窗口:主要用于工程中窗口的布局,包括新建窗口、拆分、浮动、可停靠、隐藏等操作。●帮助:提供帮助信息,方便用户学习和掌握.NET的使用方法。图2-11中菜单栏下面的就是工具栏,里面提供了可以快速访问常用菜单命令的图标,如图2-13所示。图2-13VisualStudio2010工具栏工具栏中包括了VisualStudio2010中大多数常用的命令按钮,如“新建项目”、“保存”、“复制”、“粘贴”、“启动调试”、“解决方案资源管理器”、“属性窗口”、“工具箱”、“起始页”、“命令窗口”等快捷按钮。图2-11的左侧就是VisualStudio2010的工具箱,一般情况下是隐藏状态。可以使用“视图”→“工具箱”命令打开,如图2-14所示。图2-14工具箱在工具箱中,包括了所有VisualStudio2010提供的控件。在使用时,只需将这些控件从工具箱拖放到项目相应的视图中即可。这样的方式可以节省编写代码的时间,从而加快程序开发进度。图2-11所示的中间位置为VisualStudio2010的主窗口,在里面可以进行网站页面的设计以及代码的编写,如图2-15所示。图2-15VisualStudio2010的主窗口可以将.NET平台提供的控件直接拖放到这里面,同时后台代码也是在这个区域进行编写的。在图2-15的下方,正如我们前面提到的,有三个不同的选项:“设计”表示当前为设计模式,即在浏览器上直接显示的效果;“源”为源码模式,在这里可以直接编辑页面的源代码;“拆分”表示两种混合模式,当前图2-15显示的即为混合模式,上部分显示的为源码,下部分显示的为设计效果。图2-11所示的最右边为解决方案资源管理器窗口,如图2-16所示。在这里显示的是当前整个项目的文件列表,在这里面可以快速选择需要编辑的文件。图2-16解决方案资源管理器在图2-16中,以aspx为后缀的文件为前台Web页面文件,以cs为后缀的为后台代码页面,主要包括对各类控件事件的编写,Web.config为配置文件。在解决方案资源管理器下面的为属性窗口,如图2-17所示。在图中显示的是一个Button按钮控件的属性。在VisualStudio2010中,每个控件都有自己的属性,可以在属性窗口中对属性进行设置。图2-17属性窗口开发环境的最下面是调试窗口,如图2-18所示。在编写完程序进行调试的时候,如果程序有错误可以在这里进行显示,便于发现并修改错误。图2-18调试窗口VisualStudio2010是一个开发平台的集合,除了可以开发基于B/S架构的Web应用程序外,还可以开发基于C/S架构的Windows窗体应用程序、WindowsPresentationFoundation应用程序,以及进行Office和水晶报表开发等。在VisualStudio2010开发平台上可以支持C#,VB,C++等开发语言。VisualStudio2010支持的开发类型如图2-19所示。图2-19VisualStudio2010支持的开发类型2.1.3帮助系统在VisualStudio2010中最主要的帮助系统就是它提供的帮助文档。帮助文档MSDN是关于VisualStudio2010的一个资料库,里面包含了所有的原始文档和用于与VisualStudio2010集成的其他所有帮助。在这里面汇集了开发人员总结出来的开发经验以及比较好的解决方案,因此通过对帮助文档的了解可以及时获得所需要的技术知识。帮助文档MSDN的使用有两种方式,最简单的一种就是在程序的开发过程中按键盘上的“F1”键,它是激活在线帮助的快捷键。另外一种方式可以通过选择“开始”→“所有程序”→“MicrosoftVisualStudio2010”→“MicrosoftVisualStudio2010文档”打开帮助系统的启动页,如图2-20所示。图2-20帮助系统主页面使用MSDN帮助文档可以采用搜索方式查找所需要的内容,如图2-21所示,在搜索框中键入需要查找的内容并单击“搜索”按钮即可。图2-21使用MSDN帮助关于VisualStudio2010开发平台的介绍就到这里吧,怎么样,对您的“兵器”还满意吗?相信在今后不断地练习之后,会对它更加熟悉、更加得心应手。喝杯咖啡,休息一下OK,一下子说了这么多,您也看了这么久,该休息一下了,毕竟身体是革命的本钱嘛。喝杯咖啡,听听音乐,起身眺望窗外,活动活动身体,打开电视,电视里正在播放《奋斗》,对,像陆涛、华子和向南一样奋斗!向您推荐《编程之道》中的一段话:宇宙之初有道。道产生了空间和时间。空间和时间便是编程设计之阴阳。不能领悟此道的编程者总是耗尽他们所要编写的程序的时间和空间;而领悟此道的编程者却总有足够的时间和空间来达到他们的目标。除此之外,难道还有其他的情形吗?2.2内功篇——C#语言基础仅有一件强大的兵器,没有高深的内功修养,很显然是不能成为一个真正的“武林高手”的。当然,对于内功的修炼是一个漫长的过程,有时候也显出几分枯燥,引用孟子的一段话:“天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,增益其所不能……”。2.2.1C#简介首先,我们还是来认识一下C#这门语言,了解一下它的成长历程。C#是随微软的.NET技术一起成长的新一代面向对象的编程语言。C#自从2001年2月问世以来到现在已经发展到4.0版本。C#的发展历程如表2-1所示。表2-1C#发展历史从发布到目前的C#4.0版本,一路走来,C#不断地改进和完善其自身的功能,深受广大程序开发人员所喜爱。由于C#面向对象的特性、强大的功能及其VisualStudio系列对C#语言的支持,在不到8年的发展时间内,C#就已经打破了Java语言一统天下的局面,发展成为目前应用面向对象进行各种应用开发最流行的工具之一。C#语法结构简单,非常容易上手,因此它也成了很多初学者在学习软件开发之初,打开潘多拉宝盒的那把钥匙。学习和了解一门程序开发语言,首先要了解该语言的语法结构。这如同学习英语一样,需要掌握一定数量的词汇和句子结构。C#语言和英语同样是语言,只不过前者是计算机能够识别的,后者是人类进行交流的,所以掌握基本的语法是让计算机能够展示设计的应用系统的基础。当然您也不要担忧,C#不会像英语那样让人头痛,掌握C#语言的难度是远远低于英语的。下面几节,我将带领您一同静下心来修炼一下内功心法,为您讲解C#语言的一些基础知识。当然,我也不会过多地对C#语言的技术细节进行深入的讲解,因为我们的目的是一起快速地开发一个网上商店ASP.NET应用程序。您也完全不会感觉到曾经对编程有偏见的一种说法:“编程是一种痛苦!”。通过对这些知识的学习,您也许会发出这样的惊叹:“哇,编程也不过如此!”。在对这些基础知识的讲解过程中,让我们把将要实现的网上商店的业务情况考虑进来,通过这样的方式来学习C#。Areyouready?Let'sgo!2.2.2C#的数据类型C#这门年轻的程序开发语言站在Microsoft巨人的肩膀上,它集众家之长,比如VisualBasic,Java以及C++等,但又有自己的特点,比如它没有了C++中指针的概念,同时它是一门完全面向对象的语言,包含了类、对象、继承、封装、重载等概念。另外,C#中所有的类型均直接或间接地继承自System.Object基类。关于面向对象的这些概念,会在2.2.5小节中详细介绍。C#中的数据类型主要分为两类:值类型和引用类型。值类型又称为数值类型,包含简单类型、结构类型和枚举类型3种。引用类型有6种,包含类类型、数组类型、接口类型、委托类型、对象类型和字符串类型。也许您要问,值类型和引用类型到底有什么区别?这两个词字面上看起来都挺头痛的。其实两者是通过它们在计算机中存储的方式进行分类的。下面通过一个比喻在您脑海中建立一个简单而直观的印象。可以把计算机中的内存单元看成一个个抽屉,值类型的对象是直接可以从抽屉里面拿出来的;引用类型的对象也对应一个抽屉,但是在这个抽屉里拿出来的是一个抽屉号码,通过这个号码找到另外一个抽屉,在找到的这个抽屉里面放的才是引用类型对象的值。您看到这么多的术语也许就头痛了,有9种之多呢。其实它们是很简单的,只是说法比较特别而已,完全不需要像英语单词那样记住。下面将一一为您揭开它们看似神秘的面纱。小提示关于引用类型和值类型,它们背后有太多太多的故事,涉及.NETFramework的CLR(CommonLanguageRuntime,公共语言运行时)的运行方式,涉及对象在内存中托管堆、运行时栈的空间分配等问题,是一个比较复杂的概念,它需要您对.NETFramework有一个全面的、彻底的了解。在此,我不将.NETFramework的底层概念一一讲述,您可以借助其他的参考书籍,慢慢地体会其中的博大精深,例如一本叫做《框架设计(第2版):CLRViaC#》的书,就是一本很优秀的、关于.NET内部实现的书籍。当然,我还是建议您在有一定的C#程序开发经验和体会之后再去学习底层的.NET运行机制,那会稍微容易一点儿。1.值类型值类型是在它自己分配的内存中直接存储数据。值类型包括简单类型、结构类型和枚举类型。简单类型简单类型是直接由元素构成的数据类型,可细分为整数类型、实数类型、布尔类型和字符类型。以商店中的商品和它的价格为例吧,请看下面的一小段程序:productId表示商品的数量,前面的int表示它为整数类型。整数类型用来表示现实世界中的整数。C#支持8种整数类型,如long,short等,它们之间的区别在于表示整数的范围。第二行代码中的price表示商品的价格,商品的价格有可能是整数,也有可能是小数,因此用double表示,即实数类型。实数类型可以用来表示现实世界中所有的实数。根据表示范围和精度的不同,C#也支持多种实数类型,诸如float,decimal等。整数类型和实数类型完全能够表示现实世界中所有与数字有关的问题。这样就能够显示世界中的所有问题了吗?回答当然是否定的。曾经有这样一句话:“计算机程序=逻辑+数字”。所以计算机程序经常需要处理一些与逻辑相关的操作。比如用户想要在网上商店买东西,需要登录到系统,系统通过什么来识别用户是否登录了呢?实际上需要一个如下的布尔逻辑值作为判断的元素。在C#中使用bool来说明loginFlag是布尔类型的,表示用户登录的状态。布尔类型有两个取值,分别为true和false。这两个值是计算机程序进行条件选择、循环执行等操作的核心,本章将会在流程控制小节中展示其强大的魅力。在计算机程序中除了处理数字之外,最主要的信息就是字符了。字符包括数字字符、英文字符等。在C#中使用char来表示字符类型,它只能包含一个字符。因此字符可以用来表示网上商店用户的性别信息,例如:后面我们将介绍的字符串类型(string)也可以用来表示用户的性别信息,读者可以对比一下如下的代码:这两种方式外观上并没有多大的区别。但是在C#中,char和string有着本质上的区别,前者是值类型,后者是引用类型。小提示目前家用的计算机内存都可以达到4GB了,多用少用几个存储单元对程序的功能没有丝毫影响。但是目前计算机程序算法设计追求的是“时间更少、空间更小”。对初学者而言,注意节省存储空间也是一种良好的编程习惯,这也为以后开发高效率、高性能的大型应用程序奠定良好的基础,当然这是后话了。结构类型前面介绍了C#中的简单类型,但是现实世界中的事物仅靠这些简单类型是很难表达的。为了表达网上商店中的各种商品,包括商品名称、编码、价格以及厂家等基本信息,这些信息是一个整体。如果分别用单个变量来表示,肯定会破坏商品信息的整体性,也降低了程序的可读性。考虑到这样的问题,在C#中还提供了结构体的概念来帮助我们定义新的数据类型,从而解决这样的问题。结构体是由多个基本的数据类型组合而成的。这有点类似表格中的一条记录。结构类型采用struct来进行定义,内部的每一个变量称为结构的成员。下面的代码2-1中定义了一个记录商品信息的结构以及如何使用结构。代码2-1代码中的p1是一个结构类型的变量。在结构体声明中的public表示对结构类型成员的访问权限。对结构成员的访问通过结构变量加上访问符“.”号,后跟成员名称。通过对结构成员的赋值后运行这段程序,我们可以得到如下结果:结构体是C#从C中继承下来的一种类型,与C中的结构不同的是,它里面也可以包含方法、属性、实现接口等,几乎和面向对象的类一模一样(不能实现继承)。您也许又会有疑问了,到底在什么场合使用结构呢?用类岂不是更接近面向对象的思想?是不是可以把结构体从C#中移除?答案当然是否定的。C#不会毫无理由地引入一种数据类型。因为结构是值类型的,因此在表示如点、矩形等轻量级对象时的成本开销比较小。另外如果成员只是一些数据的时候,结构也是不错的选择。上面的例子中,商品Product如果只包含一些数据成员,用结构是最合适不过了。但是在网上商店中,商品还需要定义一些方法、属性等,所以就只能用类来描述了。枚举类型在网上商店中由于要涉及商品的买卖,所以订单处理是必不可少的操作。对订单处理主要是按照其状态进行的。订单状态一般分为:待处理、已确认、已收款、已发货、已取消5种状态,通常在程序中采用数字来表示各种不同的状态。如“0”表示“待处理”,“1”表示“已确认”等。这样的表示不能说是错误的,但是很容易让程序开发人员混淆,并且使程序的可读性降低。同时程序修改难度加大,比如某天程序员想用“0”表示“已取消”,程序修改量岂不是很大?当然功能强大的C#是不会让您失望的,它提供了枚举类型来解决这样的问题。先看下面的代码:代码定义了State为枚举类型,里面的元素如“待处理”表示一个int类型的常数。默认情况下,第一个枚举数为0,后面每个枚举数的值依次递增1。因此在此枚举中,“待处理”为0,“已确认”为1,“已收款”为2,依此类推。枚举也可以重写默认值的初始值设定项。如下代码:在此枚举中,强制元素序列从1而不是从0开始。使用枚举元素方式如下,它可以与基础类型(int)的值相互转换。下面的代码则展示了如何使用枚举:因此通过枚举可以很方便地与整数进行转换,从而使程序代码具有更高的可读性和可维护性。2.引用类型C#提供的另一种数据类型是引用类型,引用类型的变量不直接存储所包含的值,而是指向它所要存储的值,也可以理解为引用类型存储实际数据的引用值的地址。引用类型包括类类型、接口类型、数组类型、委托类型、对象类型和字符串类型等6种类型。字符串类型在网上商店的程序中,商品名称、商品生产厂家以及用户登录名等信息可以采用下面的方式进行表示:string就是C#提供的字符串类型,在前面结构类型一节中已经遇到过它了。它是程序中非常普遍的数据类型,在string中封装了很多的内部方法,在程序开发中,只需简单地加以利用就可以了。在图2-22中显示了在string类中封装的内部方法。程序开发中只需在string变量名后加上访问符号“.”,string类封装的方法自动会显示出来。图2-22string类封装的内部方法(部分)字符串除了能保存一些信息外,还可以进行一些运算。用户如果需要购买网上商店的商品必须先登录进去,那么系统是如何验证登录的用户是否合法的呢?这里就用到了字符串提供的“==”运算符。通过这个运算符来判断用户当前输入的用户名和密码是否与系统保存的用户名、密码相同,判断结果返回为bool类型:string还提供了一个内部方法Equals()来进行字符串比较,如下所示:小提示对初学者而言,一定要分清“==”和“=”符号的区别,在C#语言中,“==”是比较运算符,用来判断两个变量是否相等;“=”是赋值符,用于对变量赋值。“=”在您熟悉的自然语言里是等于符号。数组类型数组是一组类型相同的有序数据,数组按照数组名、数据元素类型和维数来进行描述。在C#中,数组的工作方式与其他大多数开发语言中的工作方式类似,C#中的数组可以是一维数组、多维数组以及交错数组(数组的数组)。声明一个整型数组,如下所示:数组声明的时候可以初始化数组元素的值。C#通过将初始值放在大括号{}内为初始化数组提供了简单而直接的方法。如果声明时未初始化数组,则数组成员自动初始化为该数组类型的默认初始值。下面的示例展示了数组初始化的方法:访问数组成员可以直接进行,类似在其他语言中访问数组成员的方法。如下代码创建了一个名为number的数组,然后修改第3个元素的值。在数组中,元素的索引是从0开始的,也就是说,对于数组number,其元素个数为5,元素的索引编号是0~4。上面主要介绍的是一维数组,下面简单介绍一下多维数组的声明,如下所示:类类型在前面介绍结构的时候已经提到了类,在网上商店中的商品、订单都需要定义属性和方法,如果用结构来描述的话就会显得捉襟见肘,因此需要用类来进行描述。代码2-2用类Product描述网上商店中的商品,该类包含数据成员和方法成员。代码2-2类支持继承机制,通过继承派生类可以扩展基类的数据成员和方法成员,从而达到代码重用的目的。但是和C++中的类不同,C#中不允许类进行多层继承,只允许单继承。在后面章节将对类进行详细介绍。接口类型在网上商店的商品和订单中,都会对价格进行操作,在商品中需要设置或者读取商品的价格;在订单中需要获得订单中所有商品价格的总和。在程序开发中,一种可行的办法是在商品和订单类中用不同的成员方法来实现价格的操作,此外,C#还提供接口来实现。通过在接口中预先定义一系列的方法,然后在实现该接口的类中分别对这些方法进行具体实现。代码2-3展示了如何使用类来实现接口。代码2-3在上面的代码中声明了一个接口PriceInterface,它有一个成员方法getPrice。同时代码定义了商品类Product和订单类Order,并分别实现了接口PriceInterface的方法getPrice。订单中的getPrice方法体可以根据订单的业务逻辑进行设计。在这里需要了解的是,如何进行接口声明和类如何实现接口。小提示接口也支持继承机制,并且它可以从多个基接口中继承,同时类也可以实现多个接口,但接口中不能包含数据成员。委托类型在网上商店中,商品的价格不可能一直保持不变,和现实中的商品销售一样也需要进行一些促销方式,比如商品打折等。在程序的设计中,当出现打折的业务需求时,如果在出现价格的地方都进行打折换算,不仅程序修改量比较大并且也容易出错。如果商家取消打折按原价销售呢,那么所有的修改都需要还原。因此在C#中提供了委托来解决这样的问题,编程人员可以根据商家的销售策略动态地调用不同的价格计算方法。先看代码2-4,看看如何实现这个神奇的功能。代码2-4输出结果为:代码2-4的第一行声明了委托PriceDelegate,它的返回类型为double,并且不带任何参数。在商品类Product中有两个价格成员方法getPrice和DiscountPrice,它们分别用来处理原价和折扣价格。在Page_Load方法中,通过这两个成员方法创建了不同的委托对象,在具体的业务逻辑中可以根据不同情况,采用相同的方式进行创建。通过委托在程序中根据业务逻辑的处理需求动态地调用了不同的价格处理方法,使得业务逻辑处理更加方便。小提示在委托使用中,任何方法都可以通过委托动态地调用,只是方法的参数类型和返回类型必须与委托的参数类型和返回类型一致。对象类型前面已经提到,C#是一门面向对象的语言,因此可以把所有的一切都看成对象。因此C#提供了对象类型(object),可以将其他类型转化为对象类型,对象类型是所有其他类型的基类。因此object类型可以存储任何类型的值,可以定义object类型的参数,object也可以作为方法返回值的类型。下面的代码是在object中存储商品类Product的一个实例对象。3.类型转换——装箱和拆箱和现实中的商店一样,在网上商店中,同时会有很多顾客在商店中选购自己满意的商品,也会出现人头攒动的热闹景象。当然我们是看不到这个热闹场面的,计算机程序才能感觉到这番景象。既然有这么多的顾客,怎么来识别他们,看不到顾客的面孔,会不会把两个或者多个顾客当成同一个人呢?有没有解决的办法呢,回答当然是肯定的,不然我们的网上商店就无法营业了。在C#中,提供了会话(Session)来区分不同的客户。当不同的客户登录到网上商店时,服务器就会为当前的客户设置Session对象来保存不同客户的信息。即每个客户都有自己与众不同的Session,当客户购买商品的时候,通过Session,商品准确地与客户对应。下面的代码表示客户登录到商店时,商店进行的Session设置:在代码中,将客户的IDuserID(int类型)和用户名userName(string类型)装入Session对象中,因为客户的ID和用户名就能够唯一标识客户。在购买商品的时候,通过下面的代码取出会话中的信息识别客户。这样就获得了客户的ID和名称,在Session前面的(int)表示将会话值强制转换为int类型。代码2-5展示了会话设置和读取的全过程:代码2-5在代码中,创建一个用户类User对象实例,然后对用户ID和用户名称进行赋值,并将这两个成员变量装到会话对象中。最后从会话对象中读出用户ID和用户名称,并显示出来,程序运行结果为:实际上,对会话进行的操作就是C#提供的装箱和拆箱机制,它是基本类型与object类型之间的相互转换。在网上商店中,Session是object类型的,装箱就是设置会话,拆箱就是读取会话。装箱和拆箱使基本类型能够被视为对象。装箱将基本类型隐式或者显式地转换成一个object类型,如下代码所示:拆箱过程分为两步:首先检查这个对象的实例,是否为给定的值类型的装箱值;然后将这个实例的值复制给基本类型的变量,例如:装箱操作可以隐式进行,但是拆箱必须是显式的。喝杯咖啡,休息一下怎么样?您对刚刚的内容掌握了多少呢?对这些基础知识的学习是一个比较乏味的过程,但正所谓“万丈高楼平地起”,没有一个好的基础怎么行呢,您说是吧,再坚持一下,胜利就在眼前。在进入下面的学习之前,还是让我们放松一下吧,Music!2.2.3变量和常量OK,休息一下是否感觉到整个人都轻松了下来,那就让我们继续“修炼”吧,奋勇前进!1.变量在商品类Product的定义中,有这样的代码:它们都称为变量,是用来存储商品信息的基本单元。在C#中要使用变量,必须先定义变量的名称与数据类型,如下所示:如上面的代码中,使用int,float,double,string和char等关键字来定义变量名称并指定其数据类型。变量在命名时需要遵循一些规则:●变量名的第一位不能是数字,中间不能有空格。●变量名中不能使用一些特殊字符,如*,&,%,^之类的字符。●变量名不能与C#中的关键字同名,如int,class,double等。变量的命名也有一些风格,但是最主要还是以清晰易懂为主。尽量避免使用一些简单的字母作为变量名称,这会增加日后程序维护的困难,发生同名的几率也比较大。比较流行的变量命名通常以小写字母作为开始,并在每个单词开始时第一个字母使用大写。例如:这样的名称可以让人一眼就看出变量的作用,在程序开发中这样的命名是经常采用的。小提示C#语言不允许使用未初始化的变量。如果变量在定义时没有进行初始化,那么在使用该变量前一定要赋值,否则会导致编译时报错。2.静态变量在商品类Product中,还可以以这样的方式进行变量定义,如下所示:与前面的变量定义相比,您会发现在变量company的前面有static修饰,这就是C#提供的静态变量修饰符号,通过这样声明的变量为静态变量。一般在C#中,静态变量多用于类中的成员变量,表示类的所有实例对象都共同拥有的一个属性值。如上面的类Product里面的company变量值为P&G,那么由该类生成的所有实例对象的company都是P&G。由于静态变量值不依赖类的特定对象而存在,访问的时候直接通过类名加“.”加变量名来实现。如下所示:尽管类可以创建很多个对象,但静态变量只有一个副本。所以无论有多少个Product的对象在程序中被创建,在内存中company变量仅有一份。静态变量最好在声明时将其赋值。3.实例变量当然在类中,大部分的成员变量是没有static修饰的,这样的变量也称为实例变量,它们的值为类的各个特定的实例对象单独所有。比如上面代码中商品类的价格Price,各个具体的商品对象有不同的价格,因此Price必须为实例变量。因为实例变量值是由特定对象存在的,因此访问的时候,需要通过类的实例名加“.”加变量来进行访问。4.常数根据自然辩证统一的思想,任何事物都有两方面,C#编程语言中包含有变量,那么肯定也会包含常量。常量,顾名思义肯定是固定不变的,又称为常数,就是在程序运行过程中其值固定不变的量。常量的类型可以是任意的值类型或引用类型。常量被声明为字段,通过关键字const进行声明,在声明的时候必须初始化。在上面的Calendar类中,定义了int类型的月份months为常量,它的值为12,然后定义了年year、月month、日day常量分别为2008,7和11。虽然没有使用static关键字来声明常量,但可以像访问静态字段一样访问常量。通过类名加“.”加常量名来实现,如下所示:2.2.4流程控制在网上商店中,用户如果购买东西的话必须先登录,然后才能进行一系列的操作。用户在登录进行身份验证的时候有两种可能,要么是合法用户允许进入,要么是非法用户拒绝进入。程序的执行流程都是从上往下逐条顺序进行的,像用户登录这样需要选择执行代码的逻辑应该怎样完成呢?和大多数编程语言一样,C#提供了流程控制机制来实现这些逻辑功能。流程控制依据某个表达式的结果(true或false)来决定程序要执行哪些代码,不执行哪些代码,或者决定哪些代码需要重复执行。流程控制语句主要包括条件语句和循环语句。1.条件语句if语句让我们能够根据某个表达式的结果来决定是否执行一个或者多个连续语句,可有可无的else子句可以连续检验多个测试条件,switch语句单独用来同时测试多个条件。if…else语句if…else语句是最常用的条件语句,它根据布尔表达式的值来判断是否执行后面的内嵌语句。if…else语句的语法格式如下所示:if…else这两个关键字一般是成对出现的,if关键字后面紧跟着一个条件语句,若符合这个条件语句,程序直接执行if下面的语句,否则程序流程跳到else关键字下的语句。代码2-6展示了if…else的执行情况:代码2-6程序运行结果为:前面提到的用户登录网上商店的逻辑完全可以通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论