首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 閉包面試題:Lambda 捕獲外部變量形成閉包,編譯器生成顯示類

     編輯:程式設計綜合問答

定義

閉包 = 函數 + 捕獲的詞法環境變量。內部函數可訪問外部作用域變量,即使外部函數已返回。

示例


Func MakeAdder(int n) {
    return x => x + n; // 捕獲 n
}
var add3 = MakeAdder(3);
var add5 = MakeAdder(5);
Console.WriteLine(add3(10)); // 13
Console.WriteLine(add5(10)); // 15

關鍵點

  • **匿名委托**(`delegate`)與 **Lambda**(`=>`)均可形成閉包。
  • 編譯器生成**顯示類**,捕獲變量作為字段,閉包實例持有顯示類引用。
  • **循環捕獲陷阱**:`for(int i=0;i<3;i++) acts.Add(()=>i);` 全輸出 3 → 用 `int copy=i;` 捕獲副本。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved