Delegar en el método usando variables en el alcance del método pero fuera del alcance del delegado

Escribí un código de muestra donde tengo un delegado de acción declarado en un cuerpo de método donde se pasan dos parámetros y luego los consume el código de delegado sin que esos parámetros se pasen al delagte. Me parece más limpio pasar explícitamente estos parámetros al delegado también, pero en este caso no lo estoy, y este código funcionaría bien.

Me pregunto cómo .NET mantiene estas referencias disponibles en el delegado de exportación que ahora se ejecuta en un nuevo hilo.

    public void MyMethod(string name, ComplexObject myObj) { Action export = () => { //hacer algo con el nombre nombre = nombre + nombre; //hacer algo con el objeto de referencia complejo myObj.SomeMethod(name); }; // hacer más trabajo // ejemplo iniciar exportación en un subproceso nuevo System.Threading.Thread newThread = new System.Threading.Thread(new System.Threading.ThreadStart(export)); subproceso nuevo.Inicio(); }

preguntado el 05 de junio de 12 a las 17:06

1 Respuestas

El compilador crea un tipo especial que mantiene esas variables. Luego, en lugar de almacenar esas variables en la pila, crea una instancia de ese tipo cada vez que llama a ese método. Luego, los delegados anónimos usan una referencia a esa nueva instancia para obtener acceso a esas variables.

Respondido el 05 de junio de 12 a las 17:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.