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