C 中編譯器是如何實現閉包的

2022-05-08 11:03:09 字數 818 閱讀 2266

首先假設我們有如下的乙個擴充套件方法:      

public

static

void lockexec(this t obj, actionaction) where t : class

}

我們用這個擴充套件方法寫下了如下的**:

static

void testinsert(bool caninsert, string insertvalue)

});}

在這個例子中的lambda表示式中從表面看來只有list是action傳進來的變數,caninsert,insertvalue對於lamba表示式來時都是外部變數,為什麼這個表示式還能通過編譯且正確執行呢?其實這是c#編譯器幫我們做的乙個工作,c#編譯器將上面的**編譯成下邊的**,編譯器為我們生成了乙個內部類,來儲存lambda表示式引用的外部變數值,並將這個內部類的例項方法傳遞給action,這樣這個action物件的target和mothed屬性就都有值了,而且這個action的方法呼叫將採用例項方法呼叫,也就是說會有this指標。

static

void 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,下文同...