灵魂-放水

为学日益,为道日损。

BlogJava 首页 新随笔 联系 聚合 管理
  296 Posts :: 10 Stories :: 274 Comments :: 0 Trackbacks

(1)用var声明变量
js里是用var声明变量,但两者不同的是,js里的变量没有类型,数据才有类型,可以将一个变量指向任意的数据类型而运行自如。
而C#3.0里在用var声明变量时必须对其进行初始化,这样编译器能够根据初始化的值知道该变量的类型,将部分程序员要写的代码交给编译器去完成。就是说每个变量的类型还是固定的。
例如在C#3.0里可以这样直接声明并初始化变量:

var tbTitle=new System.Web.UI.WebControls.TextBox();

的确省写了很多代码,呵呵。但是,如果你想把变量声明和初始化分开,那var关键字就无能为力了。

(2)直接构建对象
js里创建对象的快捷途径一直令我很happy,例如:

var book={title:'bookTitle', author:'nate', id:222};

现在C#3.0竟也有类似的语法了:

var book=new {title="bookTitle", author="nate", id=222};

其实也是由编译器做了更多的工作,在背后自己定义了一个类,更多的原理解释大家自己google吧。

(3)扩展方法
js里给一个类扩展方法也就是给prototype原型对象添加一个方法,非常方便。
现在C#3.0也提供了类似的功能,虽然偶觉得这个新特性可能太灵活了以至影响C#的严谨性甚至软件架构方面的问题,但是无疑这还是很吸引人的:

public static ToInt32(this String s){
 return Convert.ToInt32();
}

在任意一个类中定义上述静态方法,那么你的string对象就有直接的ToInt32方法了,是不是很方便?

(4)创建对象时同时进行初始化
同样是提供了一种简洁的语法来初始化一个对象,例如:

public class Point{
 public int x;
 public int y;
}

可以这样实例化:

var point=new Point{x=100,y=200};

这样可以少些多少构造函数啊,呵呵

(5)方便声明集合对象
以前对于数组可以直接声明时初始化:

string [] s=new string[]{"red","blue","black","white"};

而对于ArrayList这样的集合类型却没有简洁的语法,只能通过Add之类的方法逐一添加,
而在C#3.0中,所有实现ICollection接口的类都有了简洁的初始化语法:

var alColors=new ArrayList{"red","blue","black","white"};

(6)Lambda表达式
尽管委托作为C#最新引入的一个概念非常优秀,它也是事件机制的基础。但用起来却很麻烦,相信每个写过的人都有体会,现在C#3.0通过Lambda表达式简化了这个过程。
Lambda表达式的关键特征是将表达式或者语句块作为参数,通过=>来直接定义一个委托,这个委托的类型会根据一系列的转换规则,由编译器决定,例如:

DemoDelegate myDelegate = ( ) => Console.WriteLine( "Hiya!!" ) ;

这里的()表示一个空参数的函数,后面的Console.WriteLine("Hiya!!");是函数体。这样就很方便的实现了委托的定义,大家不妨回忆一下在C#1.1和C#2.0中是如何的麻烦,呵呵。
Lambda表达式不是那么容易理解,更多信息可以参见C#3.0的语言规范:
http://news.csdn.net/news/newstopic/26/26742.shtml

(7)查询表达式
虽然我对Ruby了解不多,但总感觉针对集合的查询,直接在语言中体现,这种灵感来源于Ruby。
于是C#3.0又多了一项诱人的特性,可以通过类似Sql语句的方式来获得需要的数据,结果可能存储于一个集合对象中或其他。
同样,没有能力三言两语将其说清楚,参见规范:
http://news.csdn.net/news/newstopic/26/26747.shtml

posted on 2007-01-20 19:13 放水老倌 阅读(310) 评论(0)  编辑  收藏 所属分类: .NET

只有注册用户登录后才能发表评论。


网站导航: