Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Duda c#: Ambito de variables y delegados anónimos

Iniciado por blau, 25 de Septiembre de 2010, 12:16:06 AM

« anterior - próximo »

blau

              
Buenas,

estoy implementando un sistema de undo para un editor que estoy haciendo.

La idea es usar delegados anonimos y funciona bien :)

El tema es que para que funcione las variables que uso en el delegado anonimo tienen que estar definidas en el ambito de la llamada a la funcion, en este caso el Update() .

En este caso tengo una variable "beginCrono" definida en el ambito de la clase para guardar el valor inicial y cuando registro el Undo y el Redo, es cuando creo las dos variables que usaran los delegados en el ambito de la llamada a la funcion.

            if (controller.IsDragBeginning)
               {
                   beginCrono = selected.Crono;                    
               }
               else if (controller.IsDragging)
               {
                   OnMouseCursorMove(mousePos);
               }
               else if (controller.IsDragEnding)
               {
                   int EndDragCrono = selected.Crono;
                   int BeginDragCrono = beginCrono;
                   HelperUnDo.AddUndoRedo(delegate() { selected.SetCrono(beginCrono); }, delegate() { selected.SetCrono(EndDragCrono); });
               }
             

mi pregunta es mas por curiosidad que por otra cosa, ::), pero existe alguna forma de pasarle al delegado el valor de "beginCrono" o una copia, sin tener que crear una nueva variable?


Vicente

No, solo son capaces de acceder a variables dentro del ámbito donde están declarados.

blau

Cita de: Vicente en 25 de Septiembre de 2010, 12:54:06 AM
No, solo son capaces de acceder a variables dentro del ámbito donde están declarados.

???

class sinfuste
{
      int contador = 2;

      void SetValue(int value)
      {
            int contador2 = value;

            HelperUndo.AddUndoRedo( delegate() { contador = contador2; );

      }
}

Eso funciona. y el delegado esta declarado en el ambito de la funcion, ¿o te refieres al ambito de la clase?

contador es pasado al delegado por referencia y contador2 por valor.

Aunque quizas este yo un poco liado.



Vicente

Mmm estoy viendo tu primer código y ya le pasas una variable de fuera (beginCrono) que supongo será de clase. No puedes pasarle también selected.Crono sin la copia?

blau

si ese es el problema, que quiero pasarlo por valor y no por referencia.

si paso "selected.Crono" o "beginCrono", al ejecutar el delegado toma sus valores actuales y no los que tenia al crear el delegado, que es lo interesante.

si asigno sus valores a una variable del ambito de la funcion, es como si se pasaran por valor pues el delegado hace referencia a esa variable.

yo lo que quiero saber es si hay alguna forma de hacer esto sin asignar a una nueva variable. Una especie de funcion clone  o algun tipo de cast o palabra clave que cree una copia de la variable.







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.