重複の可能性:
クロージャでの変数キャプチャの詳細な説明
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 がまだ存在しているかのように使用できます。どうやって?
誰かがこれを説明できるなら、私は良い深い説明が大好きです...
私が知りたいもう 1 つのことは、コードはすべての Polynom インスタンスで同じですが、すべてのインスタンスが同じコードの別のコピーを取得するということです。もしそうなら、そのコードのコピーを 1 つだけ使用してクラスを実行する方法はありますか? (どういうわけか静的にするように)