Estoy leyendo el libro CLR Via C# y quería compartir con vosotros algo que he visto y resulta interesante en cuanto a rendimiento en el código ;-)
El operador "is" comprueba si un objeto es compatible con un tipo dado, y el resultado de la operación es un valor booleano (true o false). El operador "is" nunca provoca una excepción.
Ejemplo:
Object o = new Object();
Boolean prueba = (o is Object); //prueba es true
Boolean prueba2 = (o is Persona); //prueba2 es false
Si la referencia al objeto es null, el operador "is" siempre devuelve el valor false, porque no hay un objeto disponible para verificar su tipo.
El modo más común de usar el operador is:
if (o is Persona)
{
Persona p = (Persona) o;
//...
}
El CLR según nuestra condición IF del ejemplo verificará el tipo de objeto 2 veces, primero comprobará si o es compatible con el tipo Persona. Si lo es, dentro del if, el CLR otra vez comprobará que o referencia a una Persona cuando haga el cast.
El CLR nos proporciona seguridad, pero a costa de rendimiento, ya que el CLR determina el tipo actual del objeto referenciado por la variable o, y luego el CLR recorre la jerarquía de herencia comprobando cada tipo base contra el tipo especificado (Persona).
Aquí es dónde C# viene en nuestro rescate y nos ofrece el operador "as" para simplificarnos la vida y ganar en rendimiento:
Persona p = o as Persona;
if (p!=null)
{
//...
}
En este código el CLR comprueba si o es compatible con el tipo Persona, si lo es, "as" devuelve una referencia no nula al mismo objeto. Por contra si no es compatible, devuelve un valor null. La buena noticia, es que el operador "as" provoca que el CLR sólo tenga que comprobar el tipo de objeto una única vez.
El operador "as" tampoco genera ninguna excepción, si el objeto no puede convertirse, simplemente devuelve un valor null.
Eso es todo, voy a seguir escuchando MOS (Ministry of Sound, no penséis en Sharepoint frikis!!!) Trance Nation que ya es sábado sabadete ...
Suscribirse a:
Enviar comentarios (Atom)
2 comentarios:
Impresionante. Magnifico este post y los anteriores.
Saludos compañero, nos vemos el 15.
Gracias. No se yo si al final será el día 15, porque Berni tiene compromisos y no puede ir.
Publicar un comentario