クロージャってのをよくわからず次のコードを「クロージャだと思って」コーディング。
using System;
internal class PetitClosure
{
private static void Main()
{
Func<int> f = CreateFunc();
Console.WriteLine(f());
Console.WriteLine(f());
Console.WriteLine(f());
Console.WriteLine(f());
}
private static Func<int> CreateFunc()
{
int i = 0;
return delegate
{
i = i + 1;
return i;
};
}
}
結果は、「1,2,3,4」・・・・・。えぇ・・・! すご。
ポイント
ポイントは、CreateFunc関数で作られた関数 f を作ったときには、関数 f の戻り値が決定せず、関数 f が呼ばれるたびに CreateFunc関数内のスコープにある変数 i をインクリメントして戻してくれるってことですね。
うー。まだまだ知らないことばっかだ。