c 3 0新增特性

2021-09-30 05:03:12 字數 2686 閱讀 6613

c# 3.0引入了乙個叫做「var」的新關鍵字。這個關鍵字允許開發者建立乙個變數,但不必明確它的型別。例如,用var說明乙個字串,就像這樣:

c#3.5新特性參見:

varmydata = "this is my data";

注意,這裡並沒有提到mydata變數是乙個字串,而c# 2.0卻要求這一點。

雖然var允許您建立隱含的型別,它並沒有降低c#濃厚的型別特徵。var關鍵字只有在建立變數時有用,一旦您建立變數並且確定它的型別以後,就不能再用var來改變乙個變數的型別。

例如,這段**沒有作用:

varmydate = datetime.now;

mydate = "hello.";

使用var關鍵字還會產生乙個有趣的結果,它可以幫助開發者減少建立變數時的**輸入。例如,在c# 2.0中建立乙個customer物件,需要輸入以下**:

customer mycustomer = new customer();

使用新的var關鍵字,則只要輸入:

varmycustomer = new customer();

var關鍵字的另乙個特點在於,使用它可以避免改變乙個返回某個型別物件的方法呼叫。例如,在c# 2.0中,如果您需要呼叫乙個返回customer物件的方法,您應該編寫以下**:

customer mycustomer = getbyname("zach");

如果某個時候getbyname方法返回乙個不是customer的物件,這段**就無法編譯。但是,如果應用var關鍵字,您就不用擔心getbyname返回的物件型別。

varmydata = getbyname("zach");

現在,因為應用了var關鍵字,getbyname方法能夠進行改變,返回乙個person物件,這個方法呼叫也依然有效。

2.c# 3.0介紹了乙個初始化物件的新方法,它允許您在初始化物件時設定任何屬性值。例如,在c# 3.0中,上面的**塊可以寫成:

類訪問customer方法:

customer mycustomer = new customer;

customer類構造器:

public customer(){}

在c# 3.0**中,沒有與初始化物件對應的構造器。這樣,開發者就不用為每組需要設定的屬性建立不同的構造器。

3.c# 2.0引入了匿名方法,c# 3.0推出匿名型別。匿名型別與匿名方法類似,它們都是以嵌入方式建立,並沒有正式的名稱。在建立乙個匿名型別,您必須組合上述物件初始化器和隱型區域性變數兩個概念。下面是乙個匿名型別的例子:

varmytype = new ;

匿名型別的範圍與任何其它變數的範圍相同。例如,下面**塊中的cobra例項僅僅在speed函式塊中有效:

private void speed();}

如果乙個匿名型別被初始化而另乙個匿名型別位於範圍域中,並且它們的簽名相同,第二個型別將自己占用第乙個型別的型別。例如,在下面這段**中,cobra和mustang都是匿名型別,並且可以彼此設定。

private void speed()

;var mustang = new ;

mustang = cobra; //or you could say cobra = mustang}

4.c#3.0推出一種稱之為語言整合查詢(linq)的新方法。應用linq,開發者可以編寫出能夠搜尋任何ienumerable資料來源的**。所以除了應用tsql訪問ms sql資料庫,應用xpath訪問xml檔案外,他們還可以應用linq。

下面的**(列表c)是乙個linq查詢的例子,它返回所有ordercount大於10的顧客:

列表cusing system;

using system.query;

using system.collections.generic;

public class sampleclass}

與sql或xpath不同,linq查詢用c#,而非第三方語言編寫。這樣,查詢就不會出現型別問題,開發者也就沒有必要編寫對映**把查詢返回的資料轉化成c#物件,而由linq api自動處理對映。

5.2.extension方法

在c#中,您不能繼承和擴充用訪問識別符號標記為「封裝」的型別。但在c# 3.0中,extension方法允許您擴充任何類,甚至是標記為封裝的類。例如,如果希望新增乙個nospaces()方法到字串類中,我們要定義乙個類似列表a中的extension方法。

列表anamespacemyextensionmethods}}

在乙個類中匯入這個extension方法時,開發者就能夠對這個類包含的任何字串呼叫nosapces()方法。

extension方法的第乙個引數決定extension方法的有效型別。在這種情況下,「這個字串資料」(this string data)表明extension方法適用於字串類;如果extension方法以「這個物件資料」(this object data)為第乙個引數,則說明這個方法對每個物件有效。

要表明您希望匯入extension方法,只需在它們的命名空間中包括乙個using指令。例如,要應用上面說明的方法,需要在類檔案中包括乙個using myextensionmethods指令:(列表b)

列表busingmyextensionmethods;

namespace mynamespace}}

注意extension方法的優先度比instance方法低。因此如果instance方法和extension方法有同樣的簽名,則應執行instance方法。

C 3 0 新特性概覽

自從看了scottgu的幾篇文章後就有想讓c 3.0的一些新特性在我的部落格上也留下歷史地一頁。但是由於環境不允許好久都沒有用上.net 3.0,今天終於忍不住地要動一動鍵盤滿足一下自己的慾望,因為我自己的電腦上安裝了.net 3.0 framework sdk。在這裡我總結一下前輩們的研究成果,也...

C 3 0 新特性概覽

1.visual c 3.0 新特性概覽 在發布visual studio 2005和c 2.0之後,微軟公司又馬不停蹄的展示了人們所期望的c 的下一代版本 c 3.0。儘管c 3.0並沒有標準化,微軟還是在pdc 專業程式設計師會議 發布了乙個預覽版本,因此心急的程式設計師可以看到一些所期望的特性...

C 3 0新特性 linq相關

隱含型別區域性變數 var age 26 var username zhuye var userlist new foreach var user in userlist console.writeline user 純粹給懶人用的var關鍵字,告訴編譯器 對於clr來說,它是不會知道你是否使用了v...