c# 2.0新特性與c# 3.5新特性
一、c# 2.0 新特性:
1、泛型
listobj_list=new list();
obj_list.add(new myobject());
2、部分類(partial)
namespace ***
set }}
//或在另乙個檔案中
public partial class class1}}
3、靜態類
public static class mystaticobject
public static string mothed1()
}4、屬性訪問器可訪問性
public class class2
protected set }}
5、可空型別
int? aa = null;
aa = 23;
if (aa.hasvalue)
6、匿名方法
class someclass //在c#1.0中
void somemethod()
}class someclass2
;del();}}
7、命名空間別名限定符
global::
二、c# 3.0/3.5 新特性:
1、linq(語言整合查詢)
以前,查詢xml檔案使用xpath,資料庫剛用sql,linq搜尋任何ienumerable資料來源.
在orm解決方案中,linq物件用途很大.
示例:list customers = new list();
ienumerable query_result = from c in customers
where c.money > 100
orderby c.name
select c;
linq 包括 linq to sql, linq to objects, linq to xml 和 ado.net entity framework 等幾個部分
2、lambda表示式。更激動人心的,是一種匿名函式結構,它可以方便的實現委託、查詢綜合和擴充套件方法的 delegate 型別引數的初始化定義.
示例:原來的:
delegate void func(int x);
void add(int x)
func f=new func(add);
f(1);
可簡化為:
func f=(x)=>;
或:func f=(int x )=>;
3、隱式型別本地變數。var關鍵字(型別指令碼語言中的隱式宣告變數,主要針對linq設計)
var num=0;
var nums=;
var num='a';
var list=new list();
foreach(var i in nums)
4、擴充套件方法。extension(允許您擴充任何類,甚至是標記為封裝的類,對於擴充套件的方法必須在靜態類裡來擴充套件)
示例,在string上實現count()方法:
using system.runtime.compilerservice;
public class extensions
return count;}}
//使用:
string s="hello,world!";
int i=s.count();
5、物件和集合初始值設定項。初始化的簡化,寫實體類方便了
public class person //自動實現屬性
public int age
}var person1=new person; //...
var persons=new list,
new person
};6、寬鬆委託。寬鬆委託使得 c# 在判斷委託例項化賦值時,對於簽名不同的函式可以接受。例如 eventargs 和 mouseeventargs 是具備繼承關係的類,當它們出現在同乙個接受 eventargs 型別引數的委託定義中時,編譯器對於這兩種委託都能接受。例如:
delegate void a (object sender, mouseeventargs e);
delegate void b (int a, int b);
eventhandler e1, e2;
e1 = new a(...); // ok
e2 = new eventhandler(...); // ok
e1 = e2; // ok
b b = (long a, int b) +> ...; // ok
7、自動實現屬性。
在定義類的屬性時,常常需要像下面的**一樣封裝乙個域。
private string name;
public string name ... set ... }
c# 3.0 提供了一種簡化的屬性定義方法,可以實現上述**的作用。
public string name ...
這就是自動實現屬性。編譯器自動實現類似域封裝的**。不過自動實現屬性不能定義唯讀和只有 get 過程的屬性;set 也不能具備訪問性描述。
8、匿名型別
匿名型別常常用在查詢表示式的結果中,因為這種型別的返回值往往是乙個包含一種特定型別的 ienumerable。例如,要從上面的例子中選出年齡大於 21 歲,身高大於 160 厘公尺的 person 集合,可以採用如下形式。
var result = from person in persons where person.age >= 21 && person.height >= 160
select new ...;
new 是乙個匿名型別,編譯器將對它做如下宣告。
public class _anonymous_name_age_height ...
9、分部方法(partial分部類的分部方法,必須是void返回型別)
// 檔案 1.cs
public partial class a
// 檔案 2.cs
public partial class a //實現
}這種語法可以把函式的定義和宣告分開編寫。使用分部方法需要注意:
1、分部方法的類實體必須為 partial。
2、分部方法的返回值必須為 void。
3、如果沒有實現分部方法,但卻定義了此方法的宣告,在使用這個包含分部方法的類時,編譯器自動將沒有實現的方法簽名移除。
從C 2 0新特性到C 3 5新特性
一 c 2.0 新特性 1 泛型 listobj list new list obj list.add new myobject 2 部分類 partial namespace set 或在另乙個檔案中 public partial class class1 3 靜態類 public static ...
C 3 5 新特性的總結 一
c 3.5 新特性的總結 一 物件初始化 如果乙個類有public欄位,在建立類的物件例項時可以使用下面的 來初始化這些字段 public class myclass myclass my new myclass my.field1 abcd my.field2 44 my.field3 true ...
C 3 5 新特性的總結 一
c 3.5 新特性的總結 一 物件初始化 如果乙個類有public欄位,在建立類的物件例項時可以使用下面的 來初始化這些字段 public class myclass myclass my new myclass my.field1 abcd my.field2 44 my.field3 true ...