1主讲:王莹莹信息工程学院办公室:图书馆411Tel:159642685792怎样学习程序设计孔子:IhearandIforget.(耳听为虚)IseeandIremember.(眼见为实)IdoandIunderstand.(实践出真知)学习程序设计的捷径:写代码怎样去练习?先看懂抄写一遍,调试运行通过不看课本示例代码,自己思考要解决的问题,然后写出来。一个月后,不看课本,根据要求,重新将完整代码写出。3第一章欢迎进入C#编程世界内容使用VisualStudio2010编程环境创建C#控制台应用程序使用名命空间创建一个简单的C#图形应用程序4补充:为什么会有C#语言当1995年SUN推出Java语言之后,全世界的目光都被这个神奇的语言所吸引平台无关性安全性面向对象分布式健壮性为了应对Java的挑战,微软公司在2000年7月发布的一种全新且简单、安全、面向对象的程序设计语言:C#,是专门为.NET的应用而开发的语言5一个人和C#语言语言大师AndersHejlsberg(1960.11~),丹麦人AndersHejlsberg:不世出的软件天才,全世界最顶尖的软件技术人员之一。论实现技术,Anders可能是目前的第一高手,因为他精通程序语言、编译器技术、开发工具、Framework以及系统架构。AndersHejlsberg的主要贡献和PhilippeKahn共同创办Borland开发出TurboPascal,当时首创的In-MemoryCompiler震惊了全世界开发出全世界最畅销的Pascal产品,TurboPascal以及BorlandPascal。Anders使用汇编语言撰写编译器,创造出了全世界速度最快、品质也是一流的Pascal编译器。开发出影响深远的Delphi这个伟大的RAD工具Microsoft.NET的Architect,Microsoft颁授MicrosoftDistinguishEngineer大奖开发出VJ++语言,发明C#这个又将造成重大影响的语言。6C#之父–AndersHejlsberg7天才是怎样炼成的?《一万小时天才理论》给了我们一个回答:无论是作曲家、外科医生,还是运动员、艺术工作者,都需要经历至少10000小时的刻苦练习才能达到至高境界——10年,每天3小时——无论你是谁。成功源自内心强烈的渴望与追求。《一万小时天才理论》提出:所有的世界级专家,无论是作曲家、外科医生,还是运动员、艺术工作者,都需要经历至少10000小时的刻苦练习才能达到至高境界。对此,丹尼尔·科伊尔在书中有一番补充解释:“10000小时法则的关键在于:没有例外之人。没有人仅用3000小时就能达到世界级水准;7500小时也不行;一定要10000小时—10年,每天3小时—无论你是谁。”成功必须付出,付出你的时间与专注。先天条件无关紧要,基因决定也无从谈起,唯有不懈努力,决定平凡与奇迹。“文化环境决定论”、“人生机遇论”等对成功只是辅助作用。8历史回顾1-语言1、C/Win32API•传统上,针对Windows系列操作系统的软件开发,会联合使用C编程语言和WindowsAPI。•C语言的第一个问题在于,它是一种非常简练的语言。C程序员不得不面对手动内存管理、令人讨厌的指针运算和语法结构。•作为一种结构化语言,C语言不具备面对象开发的优点(很容易开发出意大利面条式的代码)。•考虑到这种令人生畏的语言还要再加上Win32API定义的数以千计的全局函数和数据类型,现在有那么多有问题的程序在到处运行也就不足为怪了!92、C++/MFCC++编程语言的使用是对原始的C/API软件开发模式的一个很大提升。从很多方面看,可以把C++想象成在C之上的面向对象层。虽然C++程序员得到了著名的“OOP三大支柱”(封装、继承和多态)带来的好处,但是,他们依然无法摆脱C语言所带来的一些痛苦的方面(例如,手动内存管理、令人讨厌的指针运算和语法结构)。103、VisualBasic6.0VB6的流行,归功于它能够使用户花费最少的功夫创建复杂的用户界面、代码库(如COM服务器)以及写数据访问逻辑。更胜于MFC的是,VB6通过提供一些集成代码向导、内置数据类型、类和VB专用函数把原始Win32API的复杂性隐藏了起来。VB6最大的不足(在VisualBasic.NET中已经改正)在于,它不是一个完全的面向对象语言,它只是一种支持对象(objectaware)的语言。例如,VB6不允许程序员在类型之间建立“is-a”的关系(即没有传统的继承),也不内置支持类的参数化构造。还有,VB6不能开发多线程应用程序。114、Java语言Java是面向对象编程语言,它的句法结构来源于C++。Java的强大之处远不止其平台无关性。作为一种语言,Java去掉了C++中部分令人讨厌的语法。作为一个平台,Java为程序员提供了许多预定义的包含各种类型的“包”。使用这些类型,Java程序员可以创建含有数据库连接、消息支持、Web前端支持和丰富的桌面的一个100%的纯Java应用程序。虽然Java是一种优雅的语言,但是有一个潜在的不足:使用Java意味着在开发周期内从前台到后台都要使用Java。1213高级语言的发展过程C#的语法其实是由C/C++、VisualBasic和Java四种语言融合而成。MicrosoftC#productmanager:TonyGoodhewC#:Asimple,modern,object-oriented,type-safe,versionable,compatible(兼容的),andflexible(灵活的)languageSunMicrosystems的JameGoslingandHenryMcGiltonJava:Asimple,object-oriented,distributed,interpreted(解释的),robust(强大的),secure,architecture,neutral,portable,highperformance,multithreaded,anddynamiclanguage注意两种语言皆以“simple”作为最重要的特性14历史回顾2-框架1、COMCOM(ComponentObjectModel,组件对象模型)是微软的前一个应用程序开发框架。从效果上看,COM是这样一种架构:如果你依照COM的规则创建类型,那么最后能创建一个可复用的二进制模块。二进制COM服务器的优点在于,它能以语言无关的方式被访问。也就是说,C++程序员创建的COM类可以被VB6调用,Delphi程序员可以调用由C创建的COM类等。不过COM的语言无关性还是有一些限制的。例如,没有办法用已有的COM类来派生新的COM类(因为COM本身不支持传统的继承)。15尽管COM被认为是一个非常成功的对象模型,但是表面的背后还是过于复杂了很多其他语言也做出了努力,把大部分COM基础结构隐藏起来。不过,单单是语言的支持是不足以隐藏COM的复杂性的。即使选择相对较简单的支持COM的语言(如VB6),仍然不得不面对脆弱的组件注册问题和很多与部署相关的问题(统称DLL地狱)。162、WindowsDNA因特网的出现引出了更为复杂的问题。近几年,微软已经为它的操作系统系列和其他产品添加了越来越多支持因特网的功能。很可惜,使用基于COM的Windows分布式因特网应用架构(DNA)开发Web应用程序仍然比较复杂。即WindowsDNA需要使用很多相关技术和语言:ASP、HTML、XML、JavaScript、VBScript和COM(+),还有数据访问API,如ADO。问题之一是,许多技术在语法层面上看是完全不相关的。例如,JavaScript的语法像C,而VBScript则是VB6的子集另外,就是每一种语言和每一种技术都有自己的类型系统。除了每一个API都有自己的预定义代码集合之外,即使基本数据类型也不能被认为是等价的。17.NETFramework.NETisarevolutionarynewplatform,builtonopenInternetprotocolsandstandards,withtoolsandservicesthatmeldcomputingandcommunicationsinnewways.即:.NET=新平台+标准协议(CLR)+统一开发工具18对已有代码具有完全的互操作性:已有的COM二进制组件可以和更新的.NET二进制组件共存,反之亦然。而且平台调用(PInvoke)服务允许在.NET的代码里调用基于C的库(包括操作系统的底层API)。完全的语言集成:.NET支持跨语言继承、跨语言异常处理和跨语言的调试。所有支持.NET的语言共享的公共运行时引擎全面的基类库真正简化的部署模型:在.NET环境下,不需要将二进制单元注册到系统注册表了。另外,.NET允许同一个*.dll的不同版本存在于同一台机器上。19.NET平台构造块(CLR、CTS和CLS)从程序员的角度看,.NET可以理解为一个运行库环境和一个全面的基类库。运行库层的正式名称是CLR(公共语言运行库)CLR负责管理和执行.NET框架代码CLR在.NET平台中充当一个类似于代理人的角色,负责底层统一的进程/线程管理(如线程安全)、内存管理(如垃圾收集)、安全管理、代码验证、编译以及其他的系统服务CLR通过中间语言机制实现.NET的编程语言无关性,此外也为.NETFramework带来潜在的平台无关性20公共语言运行库CLR.NET框架类库支持线程支持COM打包器类型检查器异常管理器MSIL到机器码编译器代码管理器垃圾收集安全引擎调试器类加载器22CTS(公共类型系统)定义了那些在托管代码中一定会使用的类型的特征。CLS定义了一组丰富的内置类型,以及每种类型确定的、详细的特征.net兼容编程语言提供的类型通常映射到CTS中已定义的内置类型集的某一个子集CTS最重要的特征是所有的类型都继承自公共的基类:objectCLS:公共语言规范,详细说明了一个.net兼容的编程语言的规则、属性和行为23BCL基类库不同的编程语言所提供的API或类库存在很大差异选择一种编程语言意味着程序员必须学习该语言所提供的类型、结构、类库、函数等等.NETFramework实现了应用程序开发的“通用性”,所有的编程语言均使用统一的基础类库一致性大大提高了软件开发的效率和生产率,并可以节省由于语言差异而对程序员培训的费用.NET编程语言•.NET平台是“语言中立的”目前支持20多种编程语言遵循公共语言规范CLS•微软提供:VB.NET,C++.NET,C#.NET,J#.NET•第三方提供:APL,COBOL,Pascal,Eiffel,Haskell,ML,Oberon,Perl,Python,Scheme,Smalltalk…26.NET架构操作系统公共语言运行库CLR基类库BCLADO.NET和XMLASP.NETWeb表单Web服务MobileInternetToolkitWindows表单公共语言规范CLSVBC++C#J#…VisualStudio.NET27SystemSystem.DataSystem.XmlSystem.WebGlobalizationDiagnosticsConfigurationCollectionsResourcesReflectionNetIOThreadingTextServiceProcessSecurityCommonOleDbSQLTypesSqlClientXPathXSLTRuntimeInteropServicesRemotingSerializationSerializationConfigurationSessionStateCachingSecurityServices