天天看點

C#3.0的一些新特性

1.隐含類型局部變量

var i = 5;

var h=23.56;

var s = “c sharp";

var intarr = new[] {1,2,3,4} ;

var a = new[] { 1, 10, 100, 1000 };// int[]

•var為關鍵字,可以根據後面的初始化語句自動推斷類型。

•初始化語句必須為表達式,且編譯時可以推斷類型。

•var聲明的僅限于局部變量,亦可以用于foreach, using等語句中。

•數組也可以作為隐含類型。

2.擴充方法

using system;

public static  class test

{

static void main()

     string s="hello,world";

    s.foo();  //=test.foo(s).foo();

}

public static void foo(this string s) //擴充方法;靜态類中隻能有靜态方法;

{   

console.writeline(s);

 }

擴充方法允許我們在不改變源代碼的情況下擴充(即添加)現有類型中的執行個體方法。

擴充方法要點

•擴充方法的本質為将執行個體方法調用在編譯期改變為靜态類中的靜态方法調用。

•注意擴充方法的優先級:現有執行個體方法優先級最高,其次為最近的namespace下的靜态類的靜态方法,最後為較遠的namespace下的靜态類的靜态方法。

•擴充方法是一種編譯時技術,注意與反射等運作時技術進行差別,并慎重使用。

3.對象與集合初始化器

public class point

  int x, y;

  public int x { get { return x; } set { x = value; } }

  public int y { get { return y; } set { y = value; } }

var a = new point { x = 0, y = 1 };

相當于:var a = new point();   a.x = 0; a.y = 1;

集合初始化器:

list num= new list { 0, 1, 2, 6, 7, 8, 9 };

對象與集合初始化器要點

•對象初始化器實際上利用了編譯器對對象中對外可見的字段和屬性進行按序指派。

•集合初始化器會對初始化器中的元素進行按序調用icollection.add(t)。

•注意對象初始化器和集合初始化器中成員的可見性和調用順序。

•對象與集合初始化器同樣是一種編譯時技術。

4.匿名類型

public class test

    //匿名類型;

    var p1 = new { name = "lawnmower", price = 495.00 };

    var p2 = new { name = "shovel", price = 26.95 };

    console.writeline(p2.name); 

•可以使用new關鍵字調用匿名初始化器建立一個匿名類型的對象。

•匿名類型直接繼承自system.object。

•匿名類型的成員是編譯器根據初始化器推斷而來的一些讀寫屬性。

繼續閱讀