C C 2 0新特性與C 3 5新特性

2021-04-28 09:23:54 字數 3503 閱讀 2247

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 ...