有使用過js的朋友,相信都知道function。js中的function是可以在裡面在定義乙個作為內部使用的。有時為了控制作用域,或者這種小函式只在這個函式體內會使用,所以就不希望在外部在作額外的定義。那c#中有沒有這樣類似的方式呢?答案是有的。
在c#中要實現,需要用到的是委託和lambda表示式。對於lambda表示式,是可以實現匿名函式定義和掛接委託事件的。具體的可參見該文c#利用lambda實現委託事件的掛接。
要實現函式內建立內部函式,至少有兩種方式可以用。
第一種:func<>.
第二種:action<>
func和action本質上都是委託,所不同的是func可以輸出返回值,而action是沒有返回值。下面給出實現的**。
private void outputinfo(string info)
;actionshowmessage = (message) =>
;string formatinfo = format(1, info);
showmessage(formatinfo);
}
在outputinfo函式中又定義了兩個函式format和showmessage。
其中format的前兩個引數是輸入引數,第三個引數是輸出引數,即返回值。對於func是必須要有返回值的,所以func至少也要有乙個輸出引數(可以在ide中對func看看過載)。緊接在format等號後面的是lambda表示式。需要特別注意的是,lambda表示式中的引數是輸入引數,而且是與func所指定的引數型別是一一對應的,也就是說count對應的是func中的int型別,而message對應的是func中的string型別,而lambda後在的內容(大括號內的)是具體的實現,其中的return的返回值所對應的型別是func的最後乙個引數型別,即string型別。
showmessage的引數只有輸入引數,沒有返回值的。這裡只有乙個string型別的輸入引數。
在實際運用中時,對於func和action的型別可以靈活的定義,可以極大的簡化大碼,提高重用率。
在MATLAB中建立函式
在matlab中,其自帶了眾多函式,但有時候卻沒有適合自己的那一款。此刻,你需要建立乙個屬於自己的函式,來滿足特殊的功能。正文如下 函式建立格式function y1,yn myfun x1,xm end說明 end 不能少,有 function 就有 end myfun 的名稱必須和檔名稱一致,否...
C 11 中的 lambda 函式
lambda 演算是個非常古老的計算機語言領域的技術,這段歷史一直可以追溯到20世紀30年代。程式語言最先引入 lambda 函式的是 lisp 語言。之後 lisp 的各種變種中都保留了 lambda 函式的概念。這裡不準備就 lambda 函式的歷史展開介紹。主要是說說 c 11 標準中的 la...
autocad中利用c 建立層
region 新建層 新建層 層名 返回層的objectid region 根據層名字,獲取當前的層的objectid 層名字 獲取層的objectid autodesk.autocad.databaseservices.transaction trans db.transactionmanager...