El tipo var en C#

El tipo var en C#

Var es un tipo especial de C# que fue incorporado a partir de Visual C# 3.0 tiene la peculiaridad de que cuando se declarar puede contener cualquier tipo, como si de un tipo object se tratase. ¡Pero no es lo mismo! Nosotros podemos definir la siguiente variable:

princi_var

object o = new Persona();

Porque Object es el supertipo de C# que es heredado por todos los demás tipos de lenguaje o los que nosotros definamos. Simplemente es que cualquier hijo puede ser instanciado en una variable de un tipo padre suyo. Si nosotros lo que hacemos es instanciar un objeto de tipo Persona en una variable a de tipo Object estaremos perdiendo todos los métodos y propiedades propias de clase Persona ya que la inferencia de tipos no se realiza.

declaracion_var_obje

En la imagen observamos como al intentar acceder a la interfaz de la variable lo único que obtenemos son los métodos de Object (u object que en C# es lo mismo), en ningún caso podremos acceder al método Cantar de la clase Persona, ya que hemos perdido el tipo.

El tipo var difiere por tanto de Object en que no es un supertipo de todos los demás tipos del lenguaje, si no que es un tipo que es capaz de albergar cualquier otro tipo sin que este pierda el tipo, es decir, cuando declaramos una variable de tipo var estamos creando una variable fuertemente tipada que reflejará el tipo definido por el usuario. En la siguiente imagen podemos observar como nuestra variable no pierde el tipo, ya que podemos acceder a los miembros de Persona:

declaracion_var_var

Si nosotros declaramos una variable de tipo var y con ella instanciamos un tipo Persona el compilador será capaz de reconocer que ese objeto de tipo var es un objeto de tipo Persona, es más nos lo notificará, como bien podemos observar en la siguiente imagen:

declaracion_var_compilador_acierta

Esto es realmente útil para programadores que estén manejando datos y estructuras que realmente muchas veces no sabes lo que te van a devolver. También nos ahorrará lineas que escribir, algo fundamental. Por ejemplo, si queremos crear una lista de personas será más corto escribir:

var personas = new List<Persona>();

Que declarar el tipo:

List<Persona> personas = new List<Persona>();

Este no es el único motivo pues, muchas veces cuando programamos llegamos a un punto de abstracción que no se sabe realmente con que tipo estas trabajando, o que tipo esperas que te devuelve una cierta operación. Declarar, por tanto, variables de tipo var nos hará ahorrar tiempo cuando estemos escribiendo el código, pero también nos ayudará a no tener que fijarnos tanto ni pensar en que tipo manejar e incluso nos evitará realizar cast que muchas veces no son necesarios.

Tenemos que tener claro que el uso de la variable var no puede saltarse las reglas semánticas que tiene definidas el compilador. Por tanto, cuando declaremos una variable de tipo var y le asignemos un valor automáticamente tomará ese valor. Aunque no es exactamente así, cuando definimos un variable y le asignamos un tipo no podremos después asignarle otro tipo:

declaracion_var_inferencia

Como vemos en la imagen no es posible declarar una variable var y asignarle un valor de tipo Persona y a continuación asignar a esa variable un valor de tipo entero. Lo que si podremos es jugar con tipos que tienen conversión de tipos como por ejemplo de decimal a emtero:

var_infe

En los siguientes artículos, en los que descubriremos la programación funcional, veremos como este tipo es fundamental para desarrollar software de manera no más eficiente, si no más rápida y más elegante.

Para ti
Queremos saber tu opinión. ¡Comenta!