ネタ元:Life is beautiful: Python Hack : 噛めば噛むほどおいしくなるクロージャの話
C#だとこういうことよね。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Hoge.Get());
Console.WriteLine(Hoge.Get());
}
}
static class Hoge
{
private static Func<string> GetInitializer()
{
Console.WriteLine("test");
var val = "hoge";
Get = () => val;
return Get;
}
public static Func<string> Get = GetInitializer();
}
}
実行結果はこんな感じ。
Hogeクラスのpublic staticなFunc<string>のフィールドである「Get」の中身をGetInitializerメソッドですげ変えてます。
ネタ元のPythonのコードに比べると、どうしても型システムの制限でFunc<string>の部分を書かなきゃならんので、多少は冗長に見えます。
が、そんなC#ちゃんが大好きなのでした。