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.匿名類型
using System;
public class Test
{
static void Main()
{
//匿名類型;
var p1 = new { Name = "Lawnmower", Price = 495.00 };
var p2 = new { Name = "Shovel", Price = 26.95 };
Console.WriteLine(p2.Name);
}
}
•可以使用new關鍵字調用匿名初始化器創建一個匿名類型的對象。
•匿名類型直接繼承自System.Object。
•匿名類型的成員是編譯器根據初始化器推斷而來的一些讀寫屬性。
最後更新:2017-04-02 03:42:39