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 [] {1, 2}, new [] {1, 45, 42}, new [] {1, 2, 56, 43},
                new [] {1, 2, 5, 67, 2}
            };//交错数组,数组的数组
            int[,] arrayA = { { 2, 4, 4 }, { 6, 2, 8 } };//二维数组
            int[, ,] arrarB =
            {
                {{1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}},
                {{2, 3, 4, 5, 6}, {2, 3, 4, 5, 6}, {2, 3, 4, 5, 6}, {2, 3, 4, 5, 6}},
                {{3, 4, 5, 6, 7}, {3, 4, 5, 6, 7}, {3, 4, 5, 6, 7}, {3, 4, 5, 6, 7}}
            }; //三维数组        
  匿名方法:常与委托一起使用,如下:       
 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[] { 97, 92, 81, 60 };
            IEnumerable<int> scoreQuery =
            from score in scores
            where score > 80
            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希望这篇文章对您有所帮助。

posted @ 2014-12-11 10:34  单亚林  阅读(1878)  评论(4编辑  收藏  举报