2017-08-01 12 views
0

Javascriptコードとして次のコードを見ていれば意味がありますが、Mainの呼び出しアクション()は私はNullReferenceExceptionを返しますか?アクションは、JavaScriptのコンテキストを取得しましたか?すべてに先立ってThanx。C#で "Javascriptコンテキスト"のようなものがありますか

public class Program 
{ 
    static void Main(string[] args) 
    { 
     var p = new Program(); 
     var action = p.method(); 
     action(); 
     Console.ReadKey(); 

    } 

    public Action method() 
    { 
     var i = 6; 
     Action action =() => Console.WriteLine(i); 
     i++; 
     return action; 
    } 

} 

OUTPUT >> 7

+1

あなたが探している言葉ではなく、コンテキストよりも「閉鎖」、です。 "C#closure"を検索するとトピックに関するかなりの情報がありますが、本質的に ''メソッドはそのメソッドの中に抽出され、 'method'のスコープを残した後でも持続することができます。 – Rob

答えて

0

methodで作成されたラムダラムダの内部で参照される変数をキャプチャします。

はこの記事を参照してください。https://blogs.msdn.microsoft.com/matt/2008/03/01/understanding-variable-capturing-in-c/

+0

変数 'name'をリンクする記事でプリミティブ型であった場合、Captureクラスはコピーを取得し、呼び出し元メソッドの変更はすべてCaptureクラスに反映されません。それでも彼らは?私が知っているように、キャプチャクラスは単純に参照型に合わせたものと仮定していました。 – Doug

+0

- それ以前にローカルだったものへのすべての参照は、現在、Captureクラスのフィールドへの参照になりました。変数/フィールドの型は関係ありません。 – NetMage

+0

しかし、メインメソッドで '名前'を変更すると、キャプチャのフィールドが変更されます。これは、その変数の独自のコピーでキャプチャクラスが作成された後に発生しますか? – Doug

関連する問題