C 2 0和3 0主要的新特性

2021-05-09 21:45:23 字數 3334 閱讀 8622

c# 2.0和3.0主要新特性

c# 2.0新特性

c# 2.0

引入了很多語言擴充套件,最重要的就是泛型(

generics

)、匿名方法(

anonymous methods

)、迭代器

(iterators

)和不完全型別(

partial types

)。一、泛型

泛型是2.0

版c#

語言和公共語言執行庫

(clr)

中的乙個新功能。泛型將型別引數的概念引入

.net framework

,型別引數使得設計如下類和方法成為可能:這些類和方法將乙個或多個型別的指定推遲到客戶端**宣告並例項化該類或方法的時候。例如,通過使用泛型型別引數

t,您可以編寫其他客戶端**能夠使用的單個類,而不致引入執行時強制轉換或裝箱操作的成本或風險,如下所示:

二、匿名方法

作為c# 2.0

的新特性,匿名方法基本上能夠提供與先前命名方法相同的功能,但是它已經不再需要乙個在關聯到委託之前就明確建立的方法了。

你可以把

c# 匿名方法想象為乙個實現與委託進行關聯這項功能的便捷途徑。如果同時看一下匿名方法實現和命名方法實現所取得

il結果,你會發現這兩者之間的差別非常小。當編譯器碰到匿名方法的時候,它會在類裡面建立乙個命名方法,並將它與委託進行關聯。所以匿名方法在執行期間與命名方法的效能非常類似

——效能的增加體現在開發人員的生產效率上,而不是執行期間的執行上。

三、迭代器

迭代器是

c# 2.0

中的新功能。迭代器是方法、

get

訪問器或運算子,它使您能夠在類或

結構中支援

foreach

迭代,而不必實現整個

ienumerable

介面。您只需提供乙個迭代器,即可遍歷類中的資料結構。當編譯器檢測到迭代器時,它將自動生成

ienumerable

或ienumerable

介面的current

、movenext

和dispose

方法。yield

關鍵字用於指定返回的值。到達

yield return

語句時,會儲存當前位置。下次呼叫迭代器時將從此位置重新開始執行。

迭代器對集合類特別有用,它提供一種簡單的方法來迭代不常用的資料結構(如二進位制樹)。

四、不完全型別

c#允許在乙個**檔案中存放多個類,但這樣往往不便於類的管理,所以一向是提倡乙個檔案中只存放乙個類。不過呢,隨著類規模的不斷膨脹,乙個檔案中存放乙個類也有些顯得臃腫,或者是在某個角度上不便於**的組織。

因此,c# 2.0

中引入了不完全型別的概念,即啟用了新的修飾符

partial

。借助該修飾符,我們可以在多個檔案中存放乙個類,每個檔案只包含該類的某些功能。當然,它並不單單可以修飾

class

,還可以修飾

struct

和inte***ce

。儘管在乙個單一的檔案中為乙個型別維護所有的源**是乙個良好的程式設計實踐,但有時,乙個型別變得非常大,這將成為乙個不切實際的限制。此外,程式設計師經常使用源**生成器產生應用程式的初始結構,並且修改結果**。遺憾的是,當源**在將來被再次發射時,現存的修改將會被覆蓋。

不完整型別(

partial type

)可以讓類、結構和介面被拆分成多個部分儲存在不同的原始檔中,這更利於開發和維護。此外,不完整型別允許某些型別的機器生成的部分與使用者編寫的部分之間的分離,因此增加由工具產生的**很容易。

c#3.0

新特性

隱含型別區域性變數

c# 3.0

引進了乙個新的關鍵字叫做

"var"

。var

允許你宣告乙個新變數,它的型別是從用來初始化符變數的表示式裡隱式的推斷出來的。

var只能作為區域性變數使用;

var可以申明任何型別變數,可以根據後面的初始化語句自動推斷型別;

var定義時,必須使用表示式初始化;

匿名型別

匿名型別提供了一種方便的方法,可用來將一組唯讀屬性封裝到單個物件中,而無需首先顯式定義乙個型別。

型別名由編譯器生成,並且不能在源**級使用。

匿名型別通常用在查詢表示式的

select

子句中,以便返回源序列中每個物件的屬性子集。

匿名型別是使用

new

運算子和物件初始值設定項(初始化器)建立的。

匿名型別是由乙個或多個公共唯讀屬性組成的類型別。不允許包含其他種類的類成員

也就是說,匿名型別由編譯器來推斷出乙個嚴格的型別,編譯器是可以對其型別進行判定的,只是其型別的名字不由程式設計者所知而已

擴充套件方法

擴充套件方法使你能夠使用額外的靜態方法來擴充套件各種型別。不過它們是非常有限的,也只能在例項方法不足夠的情況下才作為候補使用。 1、

擴充套件方法是給現有型別新增乙個方法; 2

、擴充套件方法是通過

指定關鍵字

this

修飾方法的第乙個引數;

3、擴充套件方法必須宣告在靜態類中;

4、擴充套件方法要通用物件來呼叫;

5、擴充套件方法可以帶引數。

lambda表示式

c#2.0

中引入了匿名方法,允許在期望出現委託的時候以「內聯

」的**替代之。儘管匿名方法提供了函式式程式語言中的很多表達能力,但匿名方法的語法實在是太羅嗦了,並且很不自然。

lambda

表示式為書寫匿名方法提供了一種更加簡單、更加函式化的語法。

實際上lambda

表示式的本質是匿名方法,也即是當編譯我們的程式**時,編譯器會自動幫我們將

lambda

表示式轉換為匿名方法。

C 2 0的新特性

c 2.0的新特性 1 區域性型別 就是把乙個類 介面,結構 分成幾部分,系統編譯時自動的組合 利用關鍵字partial修飾 partial class a partial class a 只要類的一部分繼承乙個父類,那整個類都繼承。沒一部分都可以繼承乙個介面,則整個類繼承所有介面 類的一部分一但被...

C 2 0 有哪些新特性?

泛型 在我看來,泛型就是通過將資料型別引數化從而實現了 的更為靈活的復用,泛型的出現使得c 能夠使用同一段 來操作多種資料型別。泛型無疑是c 2.0最重大的改進,它的出現賦予了c 更強的型別安全,更好的復用,更高的效率和更清晰的約束。匿名方法 匿名方法允許我們將 直接與委託例項相關聯,使委託例項化工...

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