2011-01-13 5 views

Antwort

4

Sie können es nur in einem anonymen Delegaten erfassen:

object o; 
var watcher = new FileSystemWatcher(); 
watcher.Created += (sender, e) => { 
    Console.WriteLine(o); 
    // handle created event 
}; 

Hier o stellt das Objekt, das Sie erfassen möchten (es muss nicht als object eingegeben werden).

Beachten Sie, dass dies effektiv ist die gleiche wie

class Foo { 
    private readonly object o; 
    public Foo(object o) { 
     this.o = o; 
    } 

    public void OnCreated(object sender, FileSystemEventArgs e) { 
     Console.WriteLine(this.o); 
     // handle event 
    } 
} 

object o = null; 
Foo foo = new Foo(o); 
var watcher = new FileSystemWatcher(); 
watcher.Created += foo.OnCreated; 

aber wir haben wir für uns der Compiler die Arbeit machen. Es gibt feine Unterschiede.

+1

eine Schließung :) Lesen Sie mehr darüber hier http://StackOverflow.com/Questions/428617/what-are-closures-in-net –

Verwandte Themen