首先假設我們有如下的乙個擴充套件方法:
publicstatic
void lockexec(this t obj, actionaction) where t : class
}
我們用這個擴充套件方法寫下了如下的**:
staticvoid testinsert(bool caninsert, string insertvalue)
});}
在這個例子中的lambda表示式中從表面看來只有list是action傳進來的變數,caninsert,insertvalue對於lamba表示式來時都是外部變數,為什麼這個表示式還能通過編譯且正確執行呢?其實這是c#編譯器幫我們做的乙個工作,c#編譯器將上面的**編譯成下邊的**,編譯器為我們生成了乙個內部類,來儲存lambda表示式引用的外部變數值,並將這個內部類的例項方法傳遞給action,這樣這個action物件的target和mothed屬性就都有值了,而且這個action的方法呼叫將採用例項方法呼叫,也就是說會有this指標。
staticvoid testinsert(bool caninsert, string insertvalue)
;list1.lockexec(innerclass.innermothed);
}internal
class innerclass
public
string innerproperty2
public
void innermothed(list list)
}}
C語言的編譯器
c語言的常用編譯器 目前最流行的c語言編譯器有以下幾種 gnu compiler collection 或稱 gcc microsoft c 或稱 ms c borland turbo c 或稱 turbo c 這些c語言版本不僅實現了ansi c標準,而且在此基礎上各自作了一些擴充,使之更加方便 ...
C 編譯器的設計
陸曉春前言 這個是我們這學期編譯課所要求的大程,我做的是乙個c 的編譯器,功能不多,但執行正常,開發步驟比較明確,希望與大家共享。編譯器執行效果圖如下 設計文件基本內容如下 1 整體框架 2 詞法分析 class ctokenizer class cscaner c關鍵字表 識別符號詞法 3 語法分...
微軟是如何重寫C 編譯器並使它開源的
譯者的一些話 非常真誠地感謝大家給出的反饋,這是對我最好的鞭策,以後一定努力給大家帶來優質的內容。roslyn 是 c 和 visual basic.net 的開源編譯器的代號。以下是它如何在過去十年微軟公司最暗淡的環境中開始,並成為開源 跨平台 公共語言引擎的,這一切都是為了 c 和 vb,下文同...