开篇自我介绍姓名:徐铁鲁邮箱:xyxtl@163.com关于题目关于这次演讲以一个故事开始……..AndersHejlsberg安德斯·海尔斯伯格(1960.11~),丹麦人,TurboPascal编译器的主要作者,Delphi和.NET之父。目前国内软件行业现状应用系统开发为主各种管理软件占软件开发整体的分额85%财务软件占软件开发整体分额10%GIS地理信息系统占软件开发整体分额2%硬件驱动2%其他1%目前国内软件行业现状开发模式以Web应用程序为主95%的系统软件是基于WEB的B/S架构B/S:Browser/Server传统的C/S架构日渐没落C/S:Client/Server目前国内软件行业现状各种开发语言使用率C、C++语言:使用率10%以下VB:5%以下。据说即将被淘汰JAVA:40%C#:40%其他语言:5%目前国内软件行业现状2010年开发语言市场分额全球排名目前国内软件行业现状最近十年,排名前十位的主流语言市场分额变化曲线目前国内软件行业现状使用率上升最快的开发语言C#2002年3月第一个版本,当年上半年使用率不足2%2002年下半年使用率升到10%2003年上升到16%2004年上升到25%2005年上升到30%……………到目前为止,全球超过400多万的开发者,在使用VS目前国内软件行业现状C#语言使用率上升如此之快的原因?•原中国网通的互联星空收费平台使用C#开发。•中国联通的手机短信平台使用C#开发•中国小灵通短信平台使用C#开发•中石化、鞍钢ERP使用C#开发•用友的财务软件使用C#开发•联想的防火墙管理系统使用C#开发•……….全世界的软件开发公司都在积极的使用.net平台和C#开发语言.使用C#我们能做什么?Web应用程序B/S网站和各种基于浏览器的管理系统Wap应用程序无线网络程序和无线网站客户端程序C/S如图书馆系统,超市售货系统等游戏3D游戏2D游戏网络游戏游戏客户端C#的设计目标:C#旨在设计成一种简单、现代、通用和面向对象的编程语言C#支持以下软件工程原则:强类型检查、数组边界检查、未初始化变量引用检查和自动垃圾收集,以及软件健壮性、持久性和高编程效率C#设计为开发可在分布式环境中部署的组件源代码可移植,并支持C和C++程序员很容易的迁移到C#支持国际化支持在独立的或嵌入式系统环境中编程,从非常复杂的大型操作系统到功能有限的小型系统都支持尽管C#程序在内存和处理能力等需求上有一定的经济性,但并不确保具有C或汇编语言一样的性能CLR(CommonLanguageRuntime公共语言运行时)微软学习了JAVA的做法,将虚拟机的概念引入到COM领域;这种COM虚拟机最后定名为CLR.同时,微软提出了在该运行时上运作的语言应该遵守的一些规则,以及该虚拟机的类型系统和指令集。所有的这些规范形成了最终的CLI(CommonLanguageInfrastructure,公共语言基础设施)。微软开发了CLI的一个实现,这就是大名鼎鼎的.NETC#1.0纯粹的面向对象2002年2月微软推出了VS.NET2002C#1.02003年5月微软推出了VS.NET2003C#1.1C#2.0泛型编程usingSystem.Collections.Generic;C#2.0为开发者带来的最主要的特性就是泛型编程能力。和面向对象思想一样,泛型思想也是一种已经成熟的编程思想,但依然是没有哪一种主流开发语言能够支持完备的泛型概念。这主要是因为泛型的概念在一定程度上对面向对象概念进行冲击,同时,由于在编译期间对类型参数的完全检测很难做到,很多问题会被遗留到运行时。C#2.0别出心裁,对泛型类型参数提出了“约束”的新概念,并以优雅的语法体现在语言之中。有了约束,结合编译器强大的类型推断能力,可以在编译时发现几乎所有“危险”的泛型应用。C#3.5从C#1.0到C#2.0,再至今日的令人心动的C#3.5,我们一次次的为Windows平台下的编程感慨--越来越方便的操作,越来越强大的功能,越来越简洁的代码使得由代码组成的编程世界中平添的许多色彩与欢乐。我们爱她的暧昧:var关键字(专门为LINQ设计)string[]words={“apple”,“strwawberry”,“grape”,“peach”,“banana”,goodby};varwordQuery=fromwordinwordswhereword[0]=='g'selectword;foreach(stringsinwordQuery){Console.WriteLine(s);}我们喜欢它纤细的身材--自动属性(AutomaticProperties)publicclassPerson{publicstringName{get;set;}//自动实现属性publicintAge{get;set;}}//应用Personperson=newPerson();person.Name=“张三”;person.Age=20;System.Console.Write(姓名:{0},年龄:{1},person.Name,person.Age);奇怪的=符号--lambda表达式更激动人心的,是一种匿名函数结构,它可以方便的实现委托、查询综合和扩展方法的delegate类型参数的初始化定义.delegateintdel(inti);staticvoidMain(string[]args){delmyDelegate=x=x*x;intj=myDelegate(5);Console.Write(j);}Lambda运算符=,意思为「移至」。Lambda运算符的左边会指定输入参数(如果存在),右边則包含运算式或陈述区块。Lambda运算式x=x*x的意思是「x移至x乘以x」。为我们对她的爱插上自由的翅膀--扩展方法extension(允许您扩充任何类,甚至是标记为封装的类,对于扩展的方法必须在静态类里来扩展)示例,在string上实现Count()方法:usingSystem.Runtime.CompilerService;publicclassExtensions{[Extension()]publicintCount(thisstringsource){intcount=0;foreach(variteminsource){count++;}returncount;}}//使用:strings=Hello,world!;inti=s.Count();令人心动的LINQ--语言集成查询(LanguageIntegeratedQuery)您想过在代码中不写SQL语句就实现对数据库的操作么?LINQtoSQL是O/RM(对象关系映射)在.NETFramework(VisualStudio2008)中的一种实现,它允许你用.NET的类来生成一个关系型的数据库。然后你可以用LINQ对数据库进行查询、更新、插入、删除操作。LINQtoSQL完全支持事务,视图和存储过程。它还提供了一种方便地在你的数据模型中对集合数据验证和业务逻辑规则的进行验证的方法。它的基本语法from…in..select是显得如此优雅,令我不得不为其用如此简洁的代码实现我们以往需要写数行甚至数十行才能够实现的功能感到兴奋。还是刚才的示例C#4.02010年4月12日,微软向全球发布了VS.NET2010(Coding完美世界)闪耀着中国智慧的光芒微软中国上海团队600多人参与了VS2010的开发,其中100多人做的是核心架构部分。支持多屏幕显示支持多屏幕显示,操作更加方便。方便用户屏幕间操作支持云计算全方位的用户体验弹性的计算资源可信的数据源新关键词——dynamic在新版本的C#中,dynamic关键词是一个很重要的新特性,现在你可以创建动态对象并在运行时再决定它的类型。而且.net4.0为CLR加入了一组为动态语言服务的运行时环境,称为DLR(DynamicLanguageRuntime动态语言运行时),这使得C#这种静态类型语言可以在.NETFramework中开发动态语言并为与其它动态语言提供互操作性了。DLR架构见下图:一个例子:dynamicdyn=1;Console.WriteLine(dyn.GetType());dyn=1.234;Console.WriteLine(dyn.GetType());dyn=ojlovecd;Console.WriteLine(dyn.GetType());/*输出:System.Int32System.DoubleSystem.String*/可选(或默认)参数在C#1.0就已经有很多人提过,但直到4.0才有。现在你可以在方法定义的时候为参数指定一个默认值。调用方法的时候既可以像平时那样传入参数,也可以直接跳过不传入,这样的话,就使用默认值传到方法里。staticvoidMain(string[]args){TestMethod();TestMethod(3);}staticvoidTestMethod(inti=10){Console.WriteLine(i);}命名参数在之前版本的C#中,方法定义的参数顺序必须与方法调用时的参数顺序一致,即方法Method(inti,strings)调用时就必须第一个传入int,第二个传入string,而现在,这个规矩可以被打破了。你可以自己随便什么顺序传入,这也在一定程度上提高了代码的可读性。staticvoidMain(string[]args){TestMethod2(s:ojlovecd,i:26);}staticvoidTestMethod2(inti,strings){Console.WriteLine(i:{0},s:{1},i,s);}提高COM的互操作性以后不用再写如下丑陋的代码:C#codevarexcelApp=newExcel.Application();//...excelApp.get_Range(A1,B4).AutoFormat(Excel.XlRangeAutoFormat.xlRangeAutoFormatTable3,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);现在只需这么写就搞定了:C#codeexcelApp.Range[A1,B3].AutoFormat(Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2);C#的前途?在这个世界上,没有什么比编程工具更能牵动程序员的心。一门好的编程语言几乎成了我们的信仰。C#是这个星球上有史以来最好的编程语言C#的弱点:微软没有提供其他平台上的官方支持。所以没能真正实现跨平台还想说几个问题1.编写高质量的代码1、不要硬编string/numeric,可以使用一些常量代替。(提高可读性)intCount;Count=100;privatestaticconstintZERO=0;if(Count==ZERO){//执行一些操作}2.编写高质量的代码2.程序代码:Stringtemp=String.Empty;for(inti=0;i=100;i++){temp+=i.ToString();}好的习惯:StringBuildersb=newStringBuilder();for(inti=0;i=100;i++){sb.Append(i.ToString());}2.编写高质量的代码3.使用适合的数据类型。例如:你想要判断状态,使用bool比int要好。不好的习惯:intCheck=0;if(Check==0){//执行一些操作}好的习惯:boolCheck=false;if(!Check){//执行一些操作}2.编写高质量的代码4.使用a