framework各版本新特性(为面试准备)

菜鸟D估计描述这些新特性的文章都是烂大街的货色,之所以拿出来分(e)享(xin)一下,有两个原因:1.当年面试的时候有人问到,我不知道该怎么回答;2.项目需要发布了,但是考虑到framework的版本兼容性——是否需要降版。

framework2.0:

代码片,重构,调试,可空值类型,空合并运算,多维数组,匿名方法,部分类。

代码片:将一段代码编辑成一个缩写,使用缩写让IDE自动添加已经定义的一段代码。(个人认为是IDE的功能)

重构:重命名方法,封装字段,封装方法,封装接口等改变代码结构的功能,优化代码。(个人认为是IDE的功能)

  调试:支持debug时修改代码(个人认为是IDE的功能)

  可空值类型:int?,Nullable<int>

空合并运算:AA??BB,AA是否为空,为空则使用BB;不为空则使用AA。关键字是??

      多维数组:多维数组个人使用较少,无法准确描述。举例如下(实例化的写法不止一种写法):
            int[][] nArrayHeight =
{
new [] {, }, new [] {, , }, new [] {, , , },
new [] {, , , , }
};//交错数组,数组的数组
int[,] arrayA = { { , , }, { , , } };//二维数组
int[, ,] arrarB =
{
{{, , , , }, {, , , , }, {, , , , }, {, , , , }},
{{, , , , }, {, , , , }, {, , , , }, {, , , , }},
{{, , , , }, {, , , , }, {, , , , }, {, , , , }}
}; //三维数组
  匿名方法:常与委托一起使用,如下:       
 public delegate void IntDelegate(int x);
IntDelegate d1 = delegate(int p) { Console.WriteLine(p); };

    在使用不带参数和返回值的匿名方法定义时,需要注意以下两点:

1.如果在你的匿名方法中需要对参数进行处理,那么你不能使用不定义参数列表的声明方式。也就是在定义匿名方法的时候,需要给出参数列表。

           2.不带参数和返回值的匿名方法,可以被具有任何形式签名的委托所指代。

  部分类:partial关键字 将一个类的内容放在不同的cs文件中(前提是同一个命名空间),编译时将不同的cs文件中的部分类编译在一起。

  framework3.0,3.5:

  Linq,lambda表达式,var类型推断,自动属性,对象初始化,集合初始化,扩展方法,匿名类型,ASP.NET Ajax

  Linq:语言集成查询

            int[] scores = new int[] { , , ,  };
IEnumerable<int> scoreQuery =
from score in scores
where score >
select score;

  lambda表达式:用一种新的写法将方法赋值给委托,与匿名方法相似

delegate String strDelegate(string x);
strDelegate lambda = a => { return a + "......"; };

   var类型推断:不必清楚的知道是那种类型,由编译器在编译时进行推断,常在foreach中见到

  自动属性:通常我们将属性这样写
private int _age;
public int Age { get { return _age; } set { _age = value; } } //这样非常清楚的看到属性其实是提供两个方法的“集合”
                   自动属性则这样实现: 当我们使用反编译工具之后,就会发现自动属性在编译时也会产生一个私有的变量。
public int Age{get;set;};//(输入“prop”按tab键自动生成,其实是通过代码片来实现的)

对象初始化:UserInfo model = new UserInfo { id = Person.id, name =Person.name, age =Person.age };

  集合初始化:与对象初始化类似,  List<UserInfo> list = new List<UserInfo> {new UserInfo{age=1,name="Name",id=1}, new UserInfo{age=2,name="Name",id=2} };

  扩展方法:它允许改变一个类,但是不需要源码,扩展方法是静态的。

 public static class Extention
{
public static string toJsons(this object o)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(o);
}
}

    注意:第一个参数是要扩展的类型,前面必须有this。扩展方法第一个参数在调用时不必考虑,即从第二个参数开始才是调用时的参数列表。

匿名类型:可以隐式类型化变量,使用var和new关键字来实现。

     var Person = new { id = 1, name = "yourName", age = 22 };

UserInfo model = new UserInfo { id = Person .id, name =Person.name, age =Person .age };

  ASP.Net Ajax:页面的局部刷新

  framework4.0:

  并行计算,动态类型,命名参数和可选参数

  由于4.0版本新特性菜鸟D很少使用,无法描述,大家自己看吧。

http://www.cnblogs.com/webabcd/archive/2010/06/29/1767212.html

framework4.5:(还没用到...)

  http://msdn.microsoft.com/zh-tw/library/ms171868.aspx

----------------------------------------华xie丽e的分割线-----------------------------------------------

题外话:

  本文并未详细的描述framework各版本的新特性,只是简要介绍,正如标题所述为了应付一下面试。菜鸟D当年的面试,这个问题的答案是:我只用过3.5,所以对各个版本间的差异不了解。所以只好和面试官说“沙扬娜拉”了。

菜鸟D希望这篇文章对您有所帮助。

上一篇:理解滑动平均(exponential moving average)


下一篇:64位linux系统通过编译安装apache+…