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?
No, solo son capaces de acceder a variables dentro del ámbito donde están declarados.
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.
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?
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.