C 5 0中新增特性

2021-06-09 00:23:41 字數 2214 閱讀 9850

c# 5.0隨著visualstudio 2012一起正式發布了,讓我們來看看c#5.0中增加了哪些功能。

1. 非同步程式設計

在.net 4.5中,通過async和await兩個關鍵字,引入了一種新的基於任務的非同步程式設計模型(tap)。在這種方式下,可以通過類似同步方式編寫非同步**,極大簡化了非同步程式設計模型。如下式乙個簡單的例項:

staticasyncvoiddownloadstringasync2(uriuri)

而之前的方式是這樣的:

staticvoiddownloadstringasync(uriuri)

;webclient.downloadstringasync(uri);

}也許前面這個例子不足以體現async和await帶來的優越性,下面這個例子就明顯多了:

publicvoidcopytoasyncthehardway(streamsource, streamdestination)

, null);

if(!iar.completedsynchronously) return;

break;

casefalse:

intnumread = source.endread(iar);

if(numread == 0)

iar = destination.beginwrite(buffer, 0, numread,

writeresult =>

, null);

if(!iar.completedsynchronously) return;

destination.endwrite(iar);

break;}}

};readwriteloop(null);

}publicasynctaskcopytoasync(streamsource, streamdestination)

}關於基於任務的非同步程式設計模型需要介紹的地方還比較多,不是一兩句能說完的,有空的話後面再專門寫篇文章來詳細介紹下。另外也可參看微軟的官方**:visual studio asynchronous programming,其官方文件task-based asynchronous pattern overview介紹的非常詳細, visualstudio中自帶的csharp language specification中也有一些說明。

2. 呼叫方資訊

很多時候,我們需要在執行過程中記錄一些調測的日誌資訊,如下所示:

為了調測方便,除了事件資訊外,我們往往還需要知道發生該事件的**位置以及呼叫棧資訊。在c++中,我們可以通過定義乙個巨集,然後再巨集中通過__file__和__line__來獲取當前**的位置,但c#並不支援巨集,往往只能通過stacktrace來實現這一功能,但stacktrace卻有不是很靠譜,常常獲取不了我們所要的結果。

針對這個問題,在.net 4.5中引入了三個attribute:callermembername、callerfilepath和callerlinenumber。在編譯器的配合下,分別可以獲取到呼叫函式(準確講應該是成員)名稱,呼叫檔案及呼叫行號。上面的tracemessage函式可以實現如下:

publicvoidtracemessage(stringmessage,

[callermembername] stringmembername = "",

[callerfilepath] stringsourcefilepath = "",

[callerlinenumber] intsourcelinenumber = 0)

另外,在建構函式,析構函式、屬性等特殊的地方呼叫callermembername屬性所標記的函式時,獲取的值有所不同,其取值如下表所示:

呼叫的地方

callermembername獲取的結果

方法、屬性或事件

方法,屬性或事件的名稱

建構函式

字串 ".ctor"

靜態建構函式

字串 ".cctor"

析構函式

該字串 "finalize"

使用者定義的運算子或轉換

生成的名稱成員,例如, "op_addition"。

特性建構函式

特性所應用的成員的名稱

例如,對於在屬性中呼叫callermembername所標記的函式即可獲取屬性名稱,通過這種方式可以簡化 inotifypropertychanged 介面的實現。關於呼叫方資訊更詳細的資料,請參看msdn:

C 5 0五大新特性

第一 繫結運算子,這個只是簡化了資料繫結,跟asp.net mvc3不斷改進一樣,其實不是什麼亮點改進。csharp view plain copy combobox1.text textbox1.text 將文字框的內容繫結到下拉框。第二 帶引數的泛型建構函式 這個的加入給一些設計增加了強大功能,...

C 5 0五大新特性

第一 繫結運算子,這個只是簡化了資料繫結,跟asp.net mvc3不斷改進一樣,其實不是什麼亮點改進。csharp view plain copy combobox1.text textbox1.text 將文字框的內容繫結到下拉框。第二 帶引數的泛型建構函式 這個的加入給一些設計增加了強大功能,...

C5 0演算法學習

c5.0是決策樹模型中的演算法,79年由j r quinlan發展,並提出了id3演算法,主要針對離散型屬性資料,其後又不斷的改進,形成c4.5,它在id3基礎上增加了隊連續屬性的離散化。c5.0是c4.5應用於大資料集上的分類演算法,主要在執行效率和記憶體使用方面進行了改進。c4.5演算法是id3...