Artech

Develop every application as an art using the most suitable technologies!

常用链接

统计

积分与排名

CnBlogs

专家的Blog|主页

最新评论

[原创-总结]深入理解C# 3.x的新特性系列总结

“合抱之木,生于毫末;九层之台,起于垒土”,如果把.NET比作一栋摩天大楼的话,CLR就是这座大楼的基石。CLR功能强大而复杂,它不仅为我们的.NET Program提供一个托管的执行环境,还为我们引入了一系列全新的概念:JITGCMSILAppDomianAssembly等等。深入了解CLR有利于我们开发高质量的.NET Application。为此,Anytao邀请我一起创建了CLR基础研究团队,希望搭建一个学习、交流的平台一起讨论CLR。自该团队创办以来,Anytao为此费心不少,在他的提议下,CLR基础研究团队推出了一个叫做“精品系列推广活动”。作为该团队共同创办人的我,深感惭愧,只能尽我所能写一些相关的文章支持这个活动,为此有了这篇关于C# 3.x的新特性的总结。

较之C# 2.0, C# 3.x引入了一系列新的特性,为我们编程带来很大的便利,通过有效地利用这些新特性,我们可以编写出更加简洁、优雅的程序。不过这些新特性仅仅是编译器给我们耍的小花招:在编译的时候加入一些必要的Code,使这些在C# 2.0角度看略显“残缺”的Code变得“完整”,实际上最终生成的Assembly和在C# 2.0时代并没有本质的不同。为此,有些人对这些新特性不以为然,觉得仅仅是一些表面文章。但是我的观点是:既然这些特性能给我们带来便利,干嘛不用呢?

本系列的着重点并不是放在如果去应用这些新特性上(实际上使用这些特性是很简单的),而是更多地落在对这些特性的实现的介绍上面:编译器到底在编译的时候加了哪些额外的代码来完善这些略显“残缺”的代码。

1. Anonymous Type

Anonymous Type允许我们定义一个对象并初始化一组任意的属性列表,而这个对象对应的Type并不是预先定义的。比如:

var v = new{ID = Guid.NewGuid(), Name= "Zhang San" };

2. Extension Type

通过
E xtension Method,我们可以不改变Type定义的前提下对其方法成员进行扩展:我们在另一个Type中定一个一个特性的Static 方法,使之作为这个TypeE xtension Method,这样的方法可以象其它方法一样的方法进行调用。LINQOperator,比如WhereFromOrder by等,都是通过这样的进行定义的。

 3. Lambda Expression

Lambda Expression被广泛使用到LINQ中,其本质就是一个Delegate。在这部分中,我将介绍Lambda Expression是如何通过一个Delegate来实现的。

   4. Automatically Impemented Property

有了Automatically Implemented Property,我们可以简化传统的private field + public property的属性定义方式,就像这样:

public class Vector {
    
public double X getset; }
    
public double Y getset; }
 }
 

5. Object Initializer & Collection Initializer

Object Initializer & Collection Initializer是我将对象的创建和初始化合二为一:通过Object Initializer使用一次调用创建一个对象和初始化其属性成员,通过Collection Initializer在创建Collection对象的时候同时初始化该Collection的初始成员:

Vector v = new Vector { X = 1, Y = 2 };            

IList
<string> list = new List<string> "Zhang San""Li Si""Wang Wu" };

posted on 2007-10-07 12:38 Artech 阅读(4391) 评论(26)  编辑 收藏 所属分类: .NET FrameworkC# 3.0 & LINQ

评论

#1楼  2007-10-07 14:26 Anytao      

坐一次沙发:-)
你的支持真是我们莫大的动力,精品活动系列又有了宝贵的财富。
“合抱之木,生于毫末;九层之台,起于垒土”,让我颇有同感,这个系列活动也需要一个积累的阶段。一段时间了,形成的系列还不是很多,可能还得靠邀请制来促起一定的规模。
  回复  引用  查看    

#2楼  2007-10-07 14:32 Justin      

顶一下,一直关注Artech的文章   回复  引用  查看    

#3楼  2007-10-07 14:41 Anytao      

系列链接已经加入团队公告,我自己加了:-)   回复  引用  查看    

#4楼 [楼主] 2007-10-07 14:58 Artech      

@Justin
谢谢你的关注   回复  引用  查看    

#5楼 [楼主] 2007-10-07 15:00 Artech      

@Anytao
原子里相关的内容本来就不是很多,形成系列的就更少了。邀请制是一个好的方式。   回复  引用  查看    

#6楼  2007-10-07 15:05 Anytao      

@Artech
团队公告加入链接有问题,好像可加入的内容量有限制,我找时间联系一下dudu看看。刚加好的链接,莫明其妙又没了。   回复  引用  查看    

#7楼 [楼主] 2007-10-07 15:10 Artech      

@Anytao
其实我之前已经加好了,不过现在好了,我重新加了^_^   回复  引用  查看    

#8楼  2007-10-08 10:04 zguosir      

很精彩的系列。

我还是很传统一些,不太喜欢c#3.0带来的这些所谓的新东西,在内心深处有些排斥:)不过3.0的浪潮滚滚袭来,让人不得不跟上。用不用是一回事,但无论用不用都要学啊:)   回复  引用  查看    

#9楼  2007-10-08 10:09 武眉博<活靶子.Net>      

都开始研究3.0啦   回复  引用  查看    

#10楼 [楼主] 2007-10-08 10:49 Artech      

@zguosir
了解一下总不是坏事^_^   回复  引用  查看    

#11楼 [楼主] 2007-10-08 10:50 Artech      

@武眉博&lt;活靶子.Net&gt;
满足一下好奇心^_^   回复  引用  查看    

#12楼  2007-10-08 10:52 jillzhang      

3.0还是有不少改进的,试用了三天,感觉蛮爽   回复  引用  查看    

#13楼  2007-10-08 11:19 Robert Lee      

Collection Initializer似乎2.0就可以吧?   回复  引用  查看    

#14楼  2007-10-08 17:09 StrongBird [未注册用户]

@Robert Lee
以前只能对数组进行类似的初始化。   回复  引用  查看    

#15楼  2007-10-09 20:51 jillzhang      

@StrongBird
其实这样本质上应该没有改变,只是能提高开发效率而已   回复  引用  查看    

#16楼  2007-10-10 17:38 装配脑袋      

研究一下VB9的新特性吧。不然有那么好的XML语言集成能力,就因为C#没有所以就不为人知太可惜了。
  回复  引用  查看    

#17楼 [楼主] 2007-10-10 21:09 Artech      

@装配脑袋
确实VB9中对XML的支持是C#不能比拟的。   回复  引用  查看    

#18楼  2007-10-11 15:36 xiongjianwen [未注册用户]

又来麻烦楼主你了,呵呵~~~
<add path="*.jpg" verb="*" type="CustomHandler.JpgHandler"/>
这个是为请求一个jpg图像的一个处理器 我不明白我们每次请求的大多数是一个aspx文件 在Url中我们不能*.jpg 为什么还能为图像写一个处理器??
期待楼主的回答...   回复  引用  查看    

#19楼 [楼主] 2007-10-11 15:47 Artech      

@xiongjianwen
原则上,任何Host在IIS Web Server上的任何资源,都可以设置通过在IIS上设置对应的ISAPI Mapping交给对应的ISAPI来处理。

即使在默认的情况下,ASP.NET不是是仅仅处理aspx,比如web Service,Host 在IIS上的Remoting都是通过ASP.NET从IIS接管并处理的。   回复  引用  查看    

#20楼  2007-10-12 08:26 wwei      

严重关注,认真学习中。很喜欢,   回复  引用  查看    

#21楼  2007-10-12 08:59 xiongjianwen [未注册用户]

谢谢楼主的回答,昨天也上网查了资料,每次楼主的回复都能让我学到很多!!
真心的感谢楼主!!
  回复  引用  查看    

#22楼  2007-10-14 06:12 张旋      

关注!期待活动的继续发展!   回复  引用  查看    

#23楼 [楼主] 2007-10-14 16:48 Artech      

@张旋
谢谢关注!   回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-10-07 12:44 编辑过
 
另存  打印
最新IT新闻:
· 说说麦田的博客过时论
· 阿里巴巴确立未来十年战略规划 修改自身定位
· 微软高管:Wii用户最终会成为Xbox 360用户
· 遵守YouTube案裁定 谷歌将陷入隐私指控深渊
· iPhone入华在即 中国手机产业生存面临考验