可能重複之謎:
Detailed Explanation of Variable Capture in Closures揭開拉姆達如何工作
public class Polynom {
public delegate double Func(double x);
private Func f;
public Polynom(params double[] coef) {
f = (double x) => {
double sum = 0;
for (int i = 0 ; i < coef.Length ; i++)
sum += coef[i] * Math.Pow(x,coef.Length-1-i);
return sum;
};
}
public double evaluate(double x) {
return f(x);
}
public static void Main() {
Polynom a=new Polynom(1,1,1);
Polynom b=new Polynom(2 , 2 , 0);
Console.WriteLine(a.evaluate(2));
Console.WriteLine(b.evaluate(2));
Console.ReadKey();
}
}
請注意,在F中的代碼如何使用COEF,而COEF是構造的paramater。 如果你仔細想想,除非得到coef的ref拷貝,否則它不應該工作,因爲一旦構造函數完成了它的工作,它的參數就會消失。但不知何故,調用f設法使用coef,好像它仍然存在。怎麼樣?
我會愛一個良好的深explantion如果有人能解釋這個...
,我想知道的是另一件事,代碼爲每個多項式實例相同,但每一個實例獲得另一個副本相同的代碼?如果是這樣,有沒有辦法讓我的課程只運行該代碼的一個副本? (如獲得某種靜態)
這已經被問過很多次。 – 2012-07-14 14:42:05
它是?那麼答案是什麼呢? – 2012-07-14 14:44:37
下面是一個問題,在下一步中詢問它:http://stackoverflow.com/questions/6013094/why-does-code-generate-msil-class-called-c-displayclass1你的下一步應該是加載你的在JustDecompile或ildasm中進行組裝,並查看編譯器如何創建代表lambda表達式的代碼。 – 2012-07-14 14:48:19