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希望這篇文章對您有所幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM