Detectar si un objeto ha cambiado

29/12/2007 - 15:46 por Rolando | Informe spam
Tengo esta clase (VS2008 express):

public class UsuarioActivo
{
public string Usuario {get;set;};
public string Empresa {get;set;};
..
}

y necesito detectar cuando cambien los valores de la combinacion de los
campos usuario y empresa para ejecutar un metodo de usuario pero una sola
vez.
Ejemplo si cambia solo el usuario -> ejecutar el metodo una vez
si cambia solo la empresa -> ejecutar el metodo una vez
si cambian ambos a la vez -> ejecutar el metodo una vez

Me pueden dar una idea, solo una idea ya que soy novato en C#

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
29/12/2007 - 23:25 | Informe spam
"Rolando" wrote in message
news:
Tengo esta clase (VS2008 express):

public class UsuarioActivo
{
public string Usuario {get;set;};
public string Empresa {get;set;};
..
}

y necesito detectar cuando cambien los valores de la combinacion de los
campos usuario y empresa para ejecutar un metodo de usuario pero una sola
vez.
Ejemplo si cambia solo el usuario -> ejecutar el metodo una vez
si cambia solo la empresa -> ejecutar el metodo una vez
si cambian ambos a la vez -> ejecutar el metodo una vez

Me pueden dar una idea, solo una idea ya que soy novato en C#



Para detectar los cambios, hay que implementar explícitamente el "set" (como
se hacía en el VS2005, en lugar de usar la sintaxis "abreviada" del VS2008).
De esta forma se ejecuta tu código al pasar por ahi:

private string usuario;
public string Usuario
{
get { return usuario; }
set
{
usuario = value;
EjecutarMetodo();
}
}

private string empresa;
public string Empresa
{
get { return empresa; }
set
{
empresa = value;
EjecutarMetodo();
}
}

Observa que tu tercera hipótesis ("si cambian ambos a la vez") es imposible
que ocurra a través de las Propiedades. Nunca pueden cambiar ambos a la vez,
siempre tendrás que ejecutar una instrucción que asigne un valor al usuario
(con lo cual cambia sólo este y no la empresa) y luego, en otra instrucción
distinta, asignar un valor a la empresa (con lo cual cambia ésta y no el
usuario).

Si quieres cambiar los dos valores a la vez, tendrás que añadir un método
que los cambie en lugar de hacerlo a través de las Propiedades:

public void CambiarUsuarioYEmpresa(string usuario, string empresa)
{
this.usuario=usuario;
this.empresa=empresa;
EjecutarMetodo();
}

De esta forma, solo ejecutas una vez el EjecutarMetodo cuando cambian los
dos valores.
Respuesta Responder a este mensaje
#2 Rolando
29/12/2007 - 23:51 | Informe spam
Muchas gracias.


"Alberto Poblacion"
escribió en el mensaje news:
"Rolando" wrote in message
news:
Tengo esta clase (VS2008 express):

public class UsuarioActivo
{
public string Usuario {get;set;};
public string Empresa {get;set;};
..
}

y necesito detectar cuando cambien los valores de la combinacion de los
campos usuario y empresa para ejecutar un metodo de usuario pero una sola
vez.
Ejemplo si cambia solo el usuario -> ejecutar el metodo una vez
si cambia solo la empresa -> ejecutar el metodo una vez
si cambian ambos a la vez -> ejecutar el metodo una vez

Me pueden dar una idea, solo una idea ya que soy novato en C#



Para detectar los cambios, hay que implementar explícitamente el "set"
(como se hacía en el VS2005, en lugar de usar la sintaxis "abreviada" del
VS2008). De esta forma se ejecuta tu código al pasar por ahi:

private string usuario;
public string Usuario
{
get { return usuario; }
set
{
usuario = value;
EjecutarMetodo();
}
}

private string empresa;
public string Empresa
{
get { return empresa; }
set
{
empresa = value;
EjecutarMetodo();
}
}

Observa que tu tercera hipótesis ("si cambian ambos a la vez") es
imposible que ocurra a través de las Propiedades. Nunca pueden cambiar
ambos a la vez, siempre tendrás que ejecutar una instrucción que asigne un
valor al usuario (con lo cual cambia sólo este y no la empresa) y luego,
en otra instrucción distinta, asignar un valor a la empresa (con lo cual
cambia ésta y no el usuario).

Si quieres cambiar los dos valores a la vez, tendrás que añadir un método
que los cambie en lugar de hacerlo a través de las Propiedades:

public void CambiarUsuarioYEmpresa(string usuario, string empresa)
{
this.usuario=usuario;
this.empresa=empresa;
EjecutarMetodo();
}

De esta forma, solo ejecutas una vez el EjecutarMetodo cuando cambian los
dos valores.




Respuesta Responder a este mensaje
#3 principiante
30/12/2007 - 00:35 | Informe spam
Tomando la misma idea que te da Alberto, te doy otra opción que puede cubrir
el cambio de ambos campos con una tercera propiedad "UsuarioEmpresa" que
tenga la suma de los dos (incluye tambien un IF para saber cuando realmente
cambió lo cual puede ser mas eficiente si el metodo a ejecutar es costoso):

private string usuario;
private string empresa;
private string usuarioempresa;

public string Usuario
{
get { return usuario; }
set {usuario = value; UsuarioEmpresa=usuario+empresa;}
}

public string Empresa
{
get { return empresa; }
set { empresa = value; UsuarioEmpresa=usuario+empresa;}
}

public string UsuarioEmpresa
{
get { return usuarioempresa; }
set { if (usuarioempresa!=value)
{ usuarioempresa = value; ProcesaCambioUsuarioEmpresa(); } }
}

void ProcesaCambioUsuarioEmpresa(){...}




Jose TH



"Rolando" escribió en el mensaje
news:%
Muchas gracias.


"Alberto Poblacion"
escribió en el mensaje news:
"Rolando" wrote in message
news:
Tengo esta clase (VS2008 express):

public class UsuarioActivo
{
public string Usuario {get;set;};
public string Empresa {get;set;};
..
}

y necesito detectar cuando cambien los valores de la combinacion de los
campos usuario y empresa para ejecutar un metodo de usuario pero una
sola vez.
Ejemplo si cambia solo el usuario -> ejecutar el metodo una vez
si cambia solo la empresa -> ejecutar el metodo una vez
si cambian ambos a la vez -> ejecutar el metodo una vez

Me pueden dar una idea, solo una idea ya que soy novato en C#



Para detectar los cambios, hay que implementar explícitamente el "set"
(como se hacía en el VS2005, en lugar de usar la sintaxis "abreviada" del
VS2008). De esta forma se ejecuta tu código al pasar por ahi:

private string usuario;
public string Usuario
{
get { return usuario; }
set
{
usuario = value;
EjecutarMetodo();
}
}

private string empresa;
public string Empresa
{
get { return empresa; }
set
{
empresa = value;
EjecutarMetodo();
}
}

Observa que tu tercera hipótesis ("si cambian ambos a la vez") es
imposible que ocurra a través de las Propiedades. Nunca pueden cambiar
ambos a la vez, siempre tendrás que ejecutar una instrucción que asigne
un valor al usuario (con lo cual cambia sólo este y no la empresa) y
luego, en otra instrucción distinta, asignar un valor a la empresa (con
lo cual cambia ésta y no el usuario).

Si quieres cambiar los dos valores a la vez, tendrás que añadir un método
que los cambie en lugar de hacerlo a través de las Propiedades:

public void CambiarUsuarioYEmpresa(string usuario, string empresa)
{
this.usuario=usuario;
this.empresa=empresa;
EjecutarMetodo();
}

De esta forma, solo ejecutas una vez el EjecutarMetodo cuando cambian los
dos valores.








Respuesta Responder a este mensaje
#4 Rolando
30/12/2007 - 00:47 | Informe spam
Gracias!!!! Justamente eso era lo que queria para que no se ejecute dos
veces el metodo.


"principiante" escribió en el mensaje
news:
Tomando la misma idea que te da Alberto, te doy otra opción que puede
cubrir el cambio de ambos campos con una tercera propiedad
"UsuarioEmpresa" que tenga la suma de los dos (incluye tambien un IF para
saber cuando realmente cambió lo cual puede ser mas eficiente si el metodo
a ejecutar es costoso):

private string usuario;
private string empresa;
private string usuarioempresa;

public string Usuario
{
get { return usuario; }
set {usuario = value; UsuarioEmpresa=usuario+empresa;}
}

public string Empresa
{
get { return empresa; }
set { empresa = value; UsuarioEmpresa=usuario+empresa;}
}

public string UsuarioEmpresa
{
get { return usuarioempresa; }
set { if (usuarioempresa!=value)
{ usuarioempresa = value; ProcesaCambioUsuarioEmpresa(); } }
}

void ProcesaCambioUsuarioEmpresa(){...}




Jose TH



"Rolando" escribió en el mensaje
news:%
Muchas gracias.


"Alberto Poblacion"
escribió en el mensaje news:
"Rolando" wrote in message
news:
Tengo esta clase (VS2008 express):

public class UsuarioActivo
{
public string Usuario {get;set;};
public string Empresa {get;set;};
..
}

y necesito detectar cuando cambien los valores de la combinacion de los
campos usuario y empresa para ejecutar un metodo de usuario pero una
sola vez.
Ejemplo si cambia solo el usuario -> ejecutar el metodo una vez
si cambia solo la empresa -> ejecutar el metodo una vez
si cambian ambos a la vez -> ejecutar el metodo una vez

Me pueden dar una idea, solo una idea ya que soy novato en C#



Para detectar los cambios, hay que implementar explícitamente el "set"
(como se hacía en el VS2005, en lugar de usar la sintaxis "abreviada"
del VS2008). De esta forma se ejecuta tu código al pasar por ahi:

private string usuario;
public string Usuario
{
get { return usuario; }
set
{
usuario = value;
EjecutarMetodo();
}
}

private string empresa;
public string Empresa
{
get { return empresa; }
set
{
empresa = value;
EjecutarMetodo();
}
}

Observa que tu tercera hipótesis ("si cambian ambos a la vez") es
imposible que ocurra a través de las Propiedades. Nunca pueden cambiar
ambos a la vez, siempre tendrás que ejecutar una instrucción que asigne
un valor al usuario (con lo cual cambia sólo este y no la empresa) y
luego, en otra instrucción distinta, asignar un valor a la empresa (con
lo cual cambia ésta y no el usuario).

Si quieres cambiar los dos valores a la vez, tendrás que añadir un
método que los cambie en lugar de hacerlo a través de las Propiedades:

public void CambiarUsuarioYEmpresa(string usuario, string empresa)
{
this.usuario=usuario;
this.empresa=empresa;
EjecutarMetodo();
}

De esta forma, solo ejecutas una vez el EjecutarMetodo cuando cambian
los dos valores.












email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida