タグ

2015年3月4日のブックマーク (1件)

  • 第5回 匿名メソッドとデリゲート(2/4) - @IT

    匿名メソッドは上位スコープにアクセスできる 匿名メソッドが名前のあるメソッドと決定的に違うのは、実は名前がないことではなく、上位スコープにアクセスできることである。 using System; delegate void MyAction(); class Program { static void Main(string[] args) { string message = "Hello! World!"; MyAction action = delegate() { Console.WriteLine(message); // messageは上位スコープの変数 }; action(); // 出力:Hello! World! } } この場合、変数messageはMainメソッドに属する変数であり、匿名メソッドには属していない。しかし、匿名メソッドは上位スコープにアクセスできるので、

    yowano
    yowano 2015/03/04
    C#の匿名メソッドをクロージャとして使う場合、for文のループ制御変数をそのままキャプチャすると、for文の反復処理によって変数の中身が書き換えられるので、一度コピーしてキャプチャしなければいけない。