Excepcion propia con codigo interno

04/07/2007 - 13:19 por ANT1 | Informe spam
Hola a todos, estaba interesado en crear una excepcion propia para
gestionar las excepciones o alertas que se podrian dar en mi app (que
un NIF de cliente se duplque o que no tenga el formato correcto y
demas).

En principio pense en usar la propia Excpetion o ApplicationException
al ver que tenian la propiedad Data (un idictionary), pero he visto
que esta propiedad solo dispone de metodo Get, no Set. ¿existe alguna
excepcion que se pueda modificar con algun parametro del estilo?, es
decir, una propiedad a la que pueda dar yo un valor para despues
recuperar y dependiendo de ese valor sacar una ventana de informacion
u otra (es para algo mas complejo que sacar solo el mensaje de error).

Habia pensado en algo asi:

public class ExceptionMia:ApplicationException

struct Mensaje
{
string titulo, alerta, mensaje;
image icono;
public Mensaje(string t, string a, string m, imagen i){ titulo = t;
alerta = a; mensaje = m; icono = i; }
}

Dictionary<int, Mensaje> Errores = new Dictionary>in, Mensaje>();
// Aqui llenaria los mensajes que me interesasen en el dictionary, por
ejemplo:
Errores.Add(0,"Error 0","Error En NIF", "El NIF introduccido no es
correcto, por favor revise su valor",
global::aplicacion.Properties.Resources.alerta);
Errores.Add(1,"Error 1","Error Cualquiera","Este es un error
cualquiera que se me
ocurre",global::aplicacion.Properties.Resources.error1);
// ... asi con todos los errores que desee ir añadiendo


private string titulo;

public string Titulo
{
set { titulo= value; }
get { return titulo; }
}

private string alerta;

public string Alerta
{
set { alerta= value; }
get { return alerta; }
}

private string mensaje;

public string Mensaje
{
set { mensaje = value; }
get { return mensaje; }
}


private image imagen;

public image Imagen
{
set { imagen = value; }
get { return imagen; }
}

public ExceptionMia(int codigo):base(null)
{
Mensaje aux = Mensajes[codigo];
this.Titulo = aux.titulo;
this.Alerta = aux.alerta;
this.Mensaje = aux.mensaje;
this.Imagen = aux.icono;
}

public ExceptionMia(int codigo, Exception innere):base(null, innere)
{
Mensaje aux = Mensajes[codigo];
this.Titulo = aux.titulo;
this.Alerta = aux.alerta;
this.Mensaje = aux.mensaje;
this.Imagen = aux.icono;
}

Me gustaria saber vuestra opinion, sobre todo porque no me gusta en
exceso, y no se si funcionaria, la parte del diccionario.

Un saludo.

Preguntas similare

Leer las respuestas

#16 RFOG
12/07/2007 - 11:47 | Informe spam
En Thu, 12 Jul 2007 11:33:19 +0200, ANT1 escribió:

En C++/CLI existe el constructor estático, que debe ser privado y
estático; en C# supongo que sería así:

class c
{
private static int[] enteros;
private static c()
{
enteros=new int[3] {1,2,3};}

public c()
{
...

}

Ese constructor se llama únicamente una sola vez en el primer acceso a
cualquier objeto de dicha clase, y su única función es la de inicializar
las variables estáticas complejas (o una forma de juntar todas las
inicializaciones estáticas y no tenerlas desperdigadas por toda la
definición de la clase), y, en determinadas situaciones, es la única
forma
de construir objetos complejos estáticos.

Ahí es donde debes inicializar la lista de bitmaps y/o lo que quieras.



No termino de comprenderlo yo ahora.

¿Seria necesario dentro del constuctor publico llamar al constructor
estatico?¿o es que se llama automaticamente, como comentas, en cuanto
se hace referencia a dicha clase?




El constructor estático se llama él solo (bueno, el .NET lo llama), no
necesitas hacer nada más que definirlo y ya está. Cuando lo tengas hecho,
le pones un punto de interrupción y verás cómo se llama justo cuando
toques cualquier objeto de esa clase, y sólo una vez.

http://msdn2.microsoft.com/es-es/library/k9x6w0hc(VS.80).aspx

Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación
Hay que escuchar a la razón, pero dejar hablar al sentimiento.
Respuesta Responder a este mensaje
#17 ANT1
12/07/2007 - 12:51 | Informe spam
Muchas gracias RFOG, con todo esto calculo que pueda hacerme las
clases para manejar las excepciones perfectamente. Andaba yo con este
otro link (para el que le pueda interesar)

http://msdn2.microsoft.com/es-es/library/79b3xss3(vs.80).aspx

Pero el tuyo viene mucho mejor.

Si surge algun otro problema ya comentare por aqui.

Saludos.
Respuesta Responder a este mensaje
#18 RFOG
12/07/2007 - 13:19 | Informe spam
En Thu, 12 Jul 2007 12:51:00 +0200, ANT1 escribió:

Muchas gracias RFOG, con todo esto calculo que pueda hacerme las
clases para manejar las excepciones perfectamente. Andaba yo con este
otro link (para el que le pueda interesar)

http://msdn2.microsoft.com/es-es/library/79b3xss3(vs.80).aspx

Pero el tuyo viene mucho mejor.

Si surge algun otro problema ya comentare por aqui.

Saludos.




La castaña de la MSDN es que está todo esturriado por mil sitios, a veces
lo tienes delante de las narices y no lo ves porque no buscas por la
palabra correcta.

Un superlibro de referencia (que es el consulto antes que la
documentación) es el "THe C# Programming Language" de Hejlsberg y otros,
que me recomendó en su momento Octavio, en pitinglis, claro está. Las
pocas veces que hago algo en C#, suelo intentarlo "a la" C++/CLI, y si no
me aclaro, entonces miro el libro citado (más que nada para confirmar que
estoy intentando usar algo que está en C++ pero no en C#, aunque a veces
me sorprendo).
Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación
Hay que escuchar a la razón, pero dejar hablar al sentimiento.
Respuesta Responder a este mensaje
#19 ANT1
12/07/2007 - 17:31 | Informe spam
La castaña de la MSDN es que está todo esturriado por mil sitios, a veces
lo tienes delante de las narices y no lo ves porque no buscas por la
palabra correcta.



Ya, hay veces que para encontrar algo en el MSDN tienes que dar muchas
vueltas o ser muy ocurrente con la frase que buscas.

Un superlibro de referencia (que es el consulto antes que la
documentación) es el "THe C# Programming Language" de Hejlsberg y otros,
que me recomendó en su momento Octavio, en pitinglis, claro está. Las
pocas veces que hago algo en C#, suelo intentarlo "a la" C++/CLI, y si no
me aclaro, entonces miro el libro citado (más que nada para confirmar que
estoy intentando usar algo que está en C++ pero no en C#, aunque a veces
me sorprendo).



Echare un ojo a ese libro, pero yo ya practicamente me dedico a los
foros, blgos y demas paginas de programacion.

Por cierto, todo el codigo montado como lo hablado hasta ahora
funciona perfectamente, y el metodo estatico comprobe lo de que se
cargase solo una vez y cierto es tambien.

Gracias por todo.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida