可能重复:
闭包中变量捕获的详细解释
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 是构造函数的参数。如果您考虑一下,除非它获得 coef 的 ref 副本,否则它不应该起作用,因为一旦构造函数完成其工作,它的参数就会消失。但不知何故,调用 f 设法使用 coef 就好像它仍然存在一样。如何?
如果有人能解释这一点,我会很想得到一个很好的深入解释......
我想知道的另一件事是,每个 Polynom 实例上的代码都是相同的,但是每个实例是否都会获得相同代码的另一个副本?如果是这样,有没有办法让我的课程只用该代码的 1 个副本运行?(比如以某种方式使其成为静态)