本文发表在 rolia.net 枫下论坛试用了几个小时的VS2010,语言是C#和F#,.net 4.0新功能很多,我只挑了一些我感兴趣的写一点心得
C# IDE中给我印象最深的就是“随心所欲的乱写”,然后IDE会帮助我完成后面的工作,学名叫 Code Generation。比如我新建一个Console Application,然后在main()函数里随便乱写一大堆我想象中的类和函数,如下:
main()
{
student st = new student("Mr. Bush", 60);
string name = st.GetName();
int age = st.GetAge();
}
这个时候我并没有定义student类和类中的两个函数,这时IDE会画红线提醒我,只要右键点击红线IDE就会自动生成这个student类和它的2个函数string GetName()和int GetAge()
非常方便
--------------------------------------
可选的类型参数
比如我有一个函数有99个参数,
public void f(string name, int age, string address, ....... int para98, int para99)
调用这个函数,如果一个一个地写参数我还不如去出家当和尚,我记得在对Office编程的时候经常要用到有20个参数以上的函数,太痛苦了,VS2010大大减轻了这种痛苦,你可以在函数调用的时候有选择的assign value,如下:
main()
{
f(name: "Mr. Bush",address: "USA", para98: 20);
}
这样就好了,太方便了,但是要对原函数定义作一点小小的修改,每一个可以被选择assign value的的变量要再定义的时候赋予一个default值,那么原函数修改后的定义如下
public void f(string name = "", int age = 0, string address = "", ....... int para98 = 0, int para99 = 0)
-----------------------------------------------------------------
动态类型 Dynamic
Dynamic 类型允许程序在运行时才开始实例化变量,而不是在编译时,这玩意表面上看起来很简单,也很容易上手,类似于动态语言,JavaScript 等等。但是我google了一下,发现越google内容越多,Dynamic的整个内容如果要完全理解至少要认认真真学一天时间吧!
举个例子
class student
{
public void showTime(string name)
{
Console.Write(name);
}
}
main()
{
Dynamic s = new student();
s.showTime("Mr. Bush");
s.goSleep();
}
编译会正常通过,不会产生错误,但是在运行时会抛出异常,因为goSleep()没有在 student类中定义。以前我要完成类似的功能会写一大队的反射,很烦,现在Dynamic大大简化了这一步骤
---------------------------------------
Tuple<>类型
.net 4.0加入了一些新的类型,我觉得最实用的就属这个Tuple<>类型了,简直是爱不释手,举个例子说明Tuple<>是怎么回事
以前我写函数如果希望返回n个不同类型的数值,我会用一个object[]来代替,比如:
public object[] getNameAgeAddress()
{
return new object[] {"Mr.Bush",60,"USA"};
}
很明显的缺点就是没有类型定义,编译的时候不会出错,但很容易在运行的时候出错,因为要进行烦人的boxing,unboxing操作,效率很低。现在用Tuple<>改写一下:
public Tuple<string,int,string> getNameAgeAddress()
{
return new Tuple<string,int,string>("Mr.Bush",60,"USA");
}
非常的清晰、方便,我以前在返回2个值得时候经常用KeyValuePair<T,S>,但是2个值以上就没有类似的类型了,只好用object[],现在可以用Tuple<>了
------------------------------------
MEF框架 --- Managed Extensibility Framework
这个东西很好玩,是.net 4.0新增加的一个框架,它最早是一个开源项目,在VS2008下也能用,是为了解决一个非常现实的问题而出现的 -- 为某个主程序很方便的写扩展程序,比如我写了一个俄罗斯方块游戏,但是我不懂美工,我希望其他人可以给我的砖块写美工程序,我只要使用他们写好的砖块就好了,这其实等于我写好一些砖块的标准接口,然后其他程序员继承这些砖块接口写程序,写完了我只要调用这些标准接口就好。这就是MEF框架要解决的问题,道理很简单。但实现起来并不容易。微软把这一步骤变得非常简单。事先导入System.ComponentModel.Composition,例子我就不写了,有些太长,大家有兴趣可以google一下
------------------------------------
LINQ to object 没什么大的变化,增加了一个.Zip()扩展方法
F#看了几个小时,有些晕,但是觉得F#非常好玩,C#写10行的代码,F# 2-3行就完了。F#以后应该会有巨大潜力,C# 3.0语法的很多灵感来自于函数编程。F#的主设计师说F#以后或许会成为计算的核心语言,C#和VB.NET会利用F#的结果构建外围的UI。
-----------------------------------
Windows Workflow 4
不熟悉WF,但是看资料说workflow 4.0比3.0改变了太多太多,是一次非常“激进”的升级。一个有经验的workflow 3程序员也要花很多时间和精力重新学习workflow 4新增加的很多概念和架构。但是所带来的好处是巨大的,资料上说4.0比3.0运行速度快了10-100倍更多精彩文章及讨论,请光临枫下论坛 rolia.net
C# IDE中给我印象最深的就是“随心所欲的乱写”,然后IDE会帮助我完成后面的工作,学名叫 Code Generation。比如我新建一个Console Application,然后在main()函数里随便乱写一大堆我想象中的类和函数,如下:
main()
{
student st = new student("Mr. Bush", 60);
string name = st.GetName();
int age = st.GetAge();
}
这个时候我并没有定义student类和类中的两个函数,这时IDE会画红线提醒我,只要右键点击红线IDE就会自动生成这个student类和它的2个函数string GetName()和int GetAge()
非常方便
--------------------------------------
可选的类型参数
比如我有一个函数有99个参数,
public void f(string name, int age, string address, ....... int para98, int para99)
调用这个函数,如果一个一个地写参数我还不如去出家当和尚,我记得在对Office编程的时候经常要用到有20个参数以上的函数,太痛苦了,VS2010大大减轻了这种痛苦,你可以在函数调用的时候有选择的assign value,如下:
main()
{
f(name: "Mr. Bush",address: "USA", para98: 20);
}
这样就好了,太方便了,但是要对原函数定义作一点小小的修改,每一个可以被选择assign value的的变量要再定义的时候赋予一个default值,那么原函数修改后的定义如下
public void f(string name = "", int age = 0, string address = "", ....... int para98 = 0, int para99 = 0)
-----------------------------------------------------------------
动态类型 Dynamic
Dynamic 类型允许程序在运行时才开始实例化变量,而不是在编译时,这玩意表面上看起来很简单,也很容易上手,类似于动态语言,JavaScript 等等。但是我google了一下,发现越google内容越多,Dynamic的整个内容如果要完全理解至少要认认真真学一天时间吧!
举个例子
class student
{
public void showTime(string name)
{
Console.Write(name);
}
}
main()
{
Dynamic s = new student();
s.showTime("Mr. Bush");
s.goSleep();
}
编译会正常通过,不会产生错误,但是在运行时会抛出异常,因为goSleep()没有在 student类中定义。以前我要完成类似的功能会写一大队的反射,很烦,现在Dynamic大大简化了这一步骤
---------------------------------------
Tuple<>类型
.net 4.0加入了一些新的类型,我觉得最实用的就属这个Tuple<>类型了,简直是爱不释手,举个例子说明Tuple<>是怎么回事
以前我写函数如果希望返回n个不同类型的数值,我会用一个object[]来代替,比如:
public object[] getNameAgeAddress()
{
return new object[] {"Mr.Bush",60,"USA"};
}
很明显的缺点就是没有类型定义,编译的时候不会出错,但很容易在运行的时候出错,因为要进行烦人的boxing,unboxing操作,效率很低。现在用Tuple<>改写一下:
public Tuple<string,int,string> getNameAgeAddress()
{
return new Tuple<string,int,string>("Mr.Bush",60,"USA");
}
非常的清晰、方便,我以前在返回2个值得时候经常用KeyValuePair<T,S>,但是2个值以上就没有类似的类型了,只好用object[],现在可以用Tuple<>了
------------------------------------
MEF框架 --- Managed Extensibility Framework
这个东西很好玩,是.net 4.0新增加的一个框架,它最早是一个开源项目,在VS2008下也能用,是为了解决一个非常现实的问题而出现的 -- 为某个主程序很方便的写扩展程序,比如我写了一个俄罗斯方块游戏,但是我不懂美工,我希望其他人可以给我的砖块写美工程序,我只要使用他们写好的砖块就好了,这其实等于我写好一些砖块的标准接口,然后其他程序员继承这些砖块接口写程序,写完了我只要调用这些标准接口就好。这就是MEF框架要解决的问题,道理很简单。但实现起来并不容易。微软把这一步骤变得非常简单。事先导入System.ComponentModel.Composition,例子我就不写了,有些太长,大家有兴趣可以google一下
------------------------------------
LINQ to object 没什么大的变化,增加了一个.Zip()扩展方法
F#看了几个小时,有些晕,但是觉得F#非常好玩,C#写10行的代码,F# 2-3行就完了。F#以后应该会有巨大潜力,C# 3.0语法的很多灵感来自于函数编程。F#的主设计师说F#以后或许会成为计算的核心语言,C#和VB.NET会利用F#的结果构建外围的UI。
-----------------------------------
Windows Workflow 4
不熟悉WF,但是看资料说workflow 4.0比3.0改变了太多太多,是一次非常“激进”的升级。一个有经验的workflow 3程序员也要花很多时间和精力重新学习workflow 4新增加的很多概念和架构。但是所带来的好处是巨大的,资料上说4.0比3.0运行速度快了10-100倍更多精彩文章及讨论,请光临枫下论坛 rolia.net