|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
数据库有很多应用领域,但是如果你单单学数据库的话基本上做数据库管理员比较合适而已,跟领域结合的你还得再学习那些领域知识。(其实数据挖掘我真是不懂,本来这学期开了一门课了。系列文章目次索引:《你必需晓得的.NET》- ///<summary>///本文部份内容,已宣布于《程序员》杂志第二期《C#,言语的变迁》///</summary>
复制代码 弁言
言语是程序开辟者行走江湖的手上利器,各年夜门派的妙手在论坛、博客为了自家门派争持不已早是手艺天下中的亮丽光景,虽几为方才踏进江湖的老手供应了思索的素材,但也同时利诱了初出茅庐的前行偏向。
本文不欲计算门派的高低,旨在明辨手艺的真理,这就是.NET平台下的开辟利器:C#言语,并从其变迁的历程中关于.NET手艺开展把玩一番。
鄙人篇,我们将从汗青走来,对.NET的将来做个瞻望性的懂得,详细而言就是.NET4.0的新工具。
.NET之,将来兵器
不管怎样,.NET4.0已在叩开新年的年夜门之时,以高调的姿势迎来一片掌声。宽大的手艺喜好者不会守候太长的工夫,就可以感觉C#开展中的又一次厘革。跟着.NET4.0在2009年的公布,我们关于C#4.0的存眷也将一日千里。整体而言,C#4.0的重头戏次要着眼在以下几个方面:
空话少说,接上去我们逐一明白C#4.0中的言语特征。
静态编程
尽人皆知,C#是静态强范例言语。而在良多情形下,供应“静态”举动,是经常产生的事变,比方经由过程反射在运转时会见.NET范例、挪用静态言语对象、会见COM对象等,都没法以静态范例来猎取。因而,C#4.0引进的又一个全新的关头字dynamic,也同时引进了改良静态范例与静态对象的交互才能,这就是静态查找(DynamicLookup)比方:- //Release:code06,2009/05/07//Author:Anytao,http://www.anytao.compublicstaticvoidMain(){dynamicd=GetDynamicObject();d.MyMethod(22);//办法挪用d.A=d.B;//属性赋值d[“one”]=d[“two”];//索引器赋值inti=d+100;//运算符挪用strings=d(1,2);//托付挪用}
复制代码 就像一个object能够代表任何范例,dynamic使得范例定夺在运转时举行,办法挪用、属性会见、托付挪用都可静态分拨。同时,静态特征还表现在构建一个静态对象,在C#4.0完成IDynamicObject接口的范例,能够完整界说静态操纵的意义,经由过程将C#编译器作为运转时组件来完成由静态编译器提早的操纵,比方:- dynamicd=newFoo();strings;d.MyMethod(s,3,null);
复制代码 在详细实行过程当中,C#的运转时绑定器基于运转时信息,经由过程反射猎取d的实践范例Foo,然后在Foo范例上就MyMethod办法举行办法查找和重载剖析,并实行挪用,这恰是静态挪用的面前奥密:DLR。在.NET4.0中将引进主要的底层组件DLR(DynamicLanguageRuntime,静态言语运转时),除完成静态查找的基本撑持,DLR也同时作为基本举措措施为相似于IronRuby、IronPython如许的静态言语供应一致的互操纵机制。总而言之,静态编程将为C#在以下范畴发生伟大的厘革:
- Office编程与其他COM交互。
- 静态言语撑持,在C#中消耗IronRuby静态言语范例将并不是难事,体验静态言语特征指日可待。
- 加强反射撑持。
以挪用IronRython为例,我们只需引进IronPython.dll,IronPython.Modules.dll,andMicrosoft.Scripting.dll,便可经由过程创立ScriptRuntime在C#中HostingIronPython情况,进而来操纵静态言语的范例信息。- ScriptRuntimepy=Python.CreateRuntime();dynamicmypy=py.UseFile("myfile.py");Console.WriteLine(mypy.MyMethod("Hello"));
复制代码 固然从微软以后供应的手艺材料和CTP演示中,静态查找还存在或多或少的成绩,可是在“静态”年夜行其道的明天,我们没法躲避也必需拥抱这个将来的配角,由于我深信今天会更好。
并行盘算
并行盘算的呈现,是盘算机迷信开展的一定了局,跟着盘算机硬件的迅猛开展,在多核处置器上事情已是既存现实,而传统的编程形式必需兼容新的硬件情况才干使盘算机功能到达公道的使用效果。用Anders大家的话说:将来5到10年,并行盘算将成为支流编程言语不成无视的偏向,而4.0为C#打响了完成并发的第一枪。
将来的.NETFramework4.0中将集成TPL(TaskParallelLibrary)和PLINQ(ParallelLINQ),这也意味着将来我们能够使用C#4.0完成并行化使用,在一致的事情调剂程序下举行硬件的并行和谐,这将年夜年夜进步使用程序的功能同时下降现存并发模子的庞大性。
那末,我们应当一睹为快使用C#兵器来开辟并发情况下的超酷感觉,在System.Threading.Parallel静态类供应了三个主要的办法For、Foreach、Invoke能够为我们小试牛刀:- //使用TPL,实行并行轮回义务Parallel.For(0,10,i=>{DoSomething(i);});
复制代码 在线程争用实行情形下,不异的操纵在双核平台下运转,以StopWatch举行准确工夫测试,并行情况下的实行工夫为2001ms,而非并行情况下的实行工夫为4500ms,并交运算的魅力公然名副其实。我们不屈不挠使用PLINQ实行关于并交运算的查询、排序等,以后PLINQ撑持两种体例ParallelEnumerable类和ParallelQuery类,比方:- int[]data=newint[]{0,1,2,3,4,5,6,7,8,9};int[]selected=(fromxindata.AsParallel()selectx+1).ToArray();
复制代码 更具体的对照示例留待读者在理论中对此举行会商,并行盘算为托管代码在多核情况下的功能优化供应了一致的办理计划,而将来我们会做的更好。
备注:实践上,我们能够选择下载安装MicrosoftParallelExtensionstothe.NETFramework3.5June2008CTP包,就能够在.NET3.5情况下体验并行盘算的无量魅力。
协变和逆变
协变和逆变,是为办理成绩而生的。而要理清办理甚么样的成绩,必要起首从理清几个复杂的观点入手下手。起首我们举行一点操纵:- Derivedd=newDerived();Baseb=d;
复制代码 Derived范例承继自Based范例,由Derived援用能够平安的转换为Based援用,而这类转换才能能够无缝的完成在Derived数组和Base数组,比方:- Derived[]ds=newDerived[5];Base[]bs=ds;
复制代码 而这类原始转换(由子类转换为父类)偏向不异的可变性,被称为协变(covariant);其反向操纵则被称为逆变(contravariant)。当一样的情况使用于泛型时,比方:- List<Derived>ds=newList<Derived>();List<Base>bs=ds;
复制代码 相似的操纵倒是行欠亨的。以是,这就成为C#4.0中完美的成绩——泛型的协变与逆变:- //Release:code07,2009/05/07//Author:Anytao,http://www.anytao.comList<Base>bs=newList<Base>();List<Derived>ds=newList<Derived>();bs=ds;//List<T>撑持对T协变ds=bs;//List<T>撑持对T逆变
复制代码 而在C#4.0中,陪伴着协变与逆变特征的到场,C#引进两个in和out关头字来办理成绩。- //Release:code06,2009/05/07//Author:Anytao,http://www.anytao.compublicstaticvoidMain(){dynamicd=GetDynamicObject();d.MyMethod(22);//办法挪用d.A=d.B;//属性赋值d[“one”]=d[“two”];//索引器赋值inti=d+100;//运算符挪用strings=d(1,2);//托付挪用}0
复制代码 个中,out暗示仅能作为前往值的范例参数,而in暗示仅能作为参数的范例参数,不外一个接口能够既有out又有in,因而既能够撑持协变、撑持逆变,也能够同时撑持,比方:- //Release:code06,2009/05/07//Author:Anytao,http://www.anytao.compublicstaticvoidMain(){dynamicd=GetDynamicObject();d.MyMethod(22);//办法挪用d.A=d.B;//属性赋值d[“one”]=d[“two”];//索引器赋值inti=d+100;//运算符挪用strings=d(1,2);//托付挪用}1
复制代码 定名参数和可选参数
定名参数和可选参数是两个对照复杂的特征,关于熟习其他编程言语的开辟者来讲可选参数其实不生疏,为参数供应默许值时就是可选参数:- //Release:code06,2009/05/07//Author:Anytao,http://www.anytao.compublicstaticvoidMain(){dynamicd=GetDynamicObject();d.MyMethod(22);//办法挪用d.A=d.B;//属性赋值d[“one”]=d[“two”];//索引器赋值inti=d+100;//运算符挪用strings=d(1,2);//托付挪用}2
复制代码 因而,我们能够经由过程挪用MyMethod(1)、MyMethod(1,2)体例来挪用MyMethod办法。而定名参数办理的是传送实参时,制止由于省往默许参数酿成的重载成绩,比方省往第二个参数y挪用时,便可经由过程声明参数称号的体例来传送:- //Release:code06,2009/05/07//Author:Anytao,http://www.anytao.compublicstaticvoidMain(){dynamicd=GetDynamicObject();d.MyMethod(22);//办法挪用d.A=d.B;//属性赋值d[“one”]=d[“two”];//索引器赋值inti=d+100;//运算符挪用strings=d(1,2);//托付挪用}3
复制代码 相称于挪用MyMethod(20,10,200),十分相似于Attribute的挪用体例。固然只是小技能,但也同时改良了办法重载的天真性和适配性,表现了C#言语日益完善的开展轨迹。
固然,除此以外.NET4.0还增添了良多值得等候的平台特征,也将为C#编码带来亘古未有的新体验。
.NET之,趋向不成逆转
展望将来,在手艺天下是常有的事儿。从初级言语的开展汗青来看,编程天下历来就没有中断过脚步,厘革不时产生、立异到处存在。以手艺职员的角度来观赏将来,带着C#4.0的脚步来看瞻望,除在函数式编程、并行盘算和静态特征上年夜展拳脚,MetaProgramming的观点已然浮出水面,将编译器酿成一个Service,你能够自在把持在编译器和运转期的逻辑,那是何等优美而憧憬的将来呀,以是,我们深信4.0以后另有宽广的六合跟着言语的变迁变得加倍坦荡。
归纳综合Anders大家在C#计划过程当中的头脑,C#是言语美学的集年夜成者。比方,当利用foreach举行轮回遍历以后,当使用using语句取代try/finally完成强迫资本办理,当应当attribute举行运转时反射,当以LINQ举行言语级其余信息查询,这些言语级其余撑持为C#完成面向对象编程带来壮大的功效动力和美学感觉。
注:本文代码在VS2010CTP基本上开辟,未检测任何版本更新所带来的分歧,看明察。
参考文献
(Web)http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html中文版《2008年12月编程言语排行榜:C/C++无望夺得年度言语》
(Web)http://weblogs.asp.net/podwysocki/archive/2008/05/24/what-is-the-future-of-c-anyways.aspx
(Web)NewfeaturesinC#4.0
(Web)http://msdn.microsoft.com/en-us/magazine/cc163340.aspx
作者简介:
王涛,网名Anytao,微软C#MVP,初级软件工程师,机器工程硕士,《你必需晓得的.NET》一书作者,次要研讨偏向为.NET底层架构和企业级体系使用。现就任于某软件公司卖力架构计划、软件开辟和项目办理方面的事情。作者对.NET基本架构和CLR底层运转机制有浓郁的研讨乐趣和成就,熟习ASP.NET、XML、WCF、SQLServer相干手艺,劈面向对象、计划形式和软件架构有必定的研讨与理论履历。他的接洽体例以下:http://www.ckuyun.com/Anytao
2009/05/11|http://anytao.cnblogs.com/|http://anytao.net/blog/post/2009/05/08/anytao-insidenet-30-tenyear-part02.aspx
本文以“近况”供应且没有任何包管,同时也没有授与任何权力。|Thispostingisprovided"ASIS"withnowarranties,andconfersnorights.
本文版权回作者一切,接待转载,但未经作者批准必需保存此段声明,且在文章页面分明地位给出原文毗连,不然保存究查功令义务的权力。
在经过全球个人PC市场占有90%的微软对asp.net不断优化与整合后,asp.net与微软自身平台的动用上更加的高效,加上asp.net在应用上非常容易上手,相信asp.net仍会是最多客户选用的脚本语言,并会在未来几年继续领跑。 |
|