深入理解C# 3.x的新特性系列总结

本文详细介绍了C#3.x版本中引入的一系列新特性,包括匿名类型、扩展方法、lambda表达式、自动实现属性及对象初始化器等。通过这些新特性,开发者能够编写出更为简洁优雅的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2007年10月08日 11:50:00

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

  较之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 方法,使之作为这个Type的E xtension Method,这样的方法可以象其它方法一样的方法进行调用。LINQ的Operator,比如Where,From,Order 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 { get; set; }
   public double Y { get; set; }
   }

  5. Object Initializer & Collection Initializer

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

以下是引用片段:
 Vector v = new Vector { X = 1, Y = 2 };
  
  IList list = new List { "Zhang San", "Li Si", "Wang Wu" };

Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1815013


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值