C#2.0時代のゲームプログラミング(28)

C#delegateは、嫌らしさ抜群である。


001 class Program
002 {
003 public delegate void TestDelegate();
004
005 static void Main(string[] args)
006 {
007 int i = 1;
008 TestDelegate d = delegate
009 {
010 Console.WriteLine(i.ToString());
011 };
012 i = 2;
013 d(); // 2が表示される
014 }
015 }
016

私はこの結果を最初に見たとき「何故1ではなく2が表示されるのだろう?」と思った。疑問は二つあって、ひとつは、「どうやって実装しているのか」という意味であり、もう一つは、「何故このような実装になっているのか」ということである。(つづく)