zoukankan      html  css  js  c++  java
  • 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希望这篇文章对您有所帮助。

  • 相关阅读:
    ORA-12514, TNS:listener does not currently know of service requested in connect descriptor
    Cannot open url. please check this url is correct
    Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.6.RELEASE:repackage failed: Unable to find main class
    eclipse点击空白处自动打开项目
    Caused by: org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2
    git忽略文件
    org.elasticsearch.transport.ReceiveTimeoutTransportException[cluster:monitor/nodes/liveness] request_id [31] timed out after [5000ms]
    Could not resolve placeholder
    分布式架构--第一篇--项目拆分(maven命令生成多模块项目)
    spring mvc官网下最新jar搭建框架-静态资源访问处理-注解-自动扫描
  • 原文地址:https://www.cnblogs.com/cnDqf/p/4157049.html
Copyright © 2011-2022 走看看