Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=ddbb5a9d-3e62-4621-94ee-a87ef9b5c537

Definición automática de tipos de variables en C#

DotNet_3

En C# es posible dejar al compilador la tarea de determinar el tipo de una variable que hayamos inicializado de manera explícita.

El tipo se deduce a partir de la expresión de inicialización. De este modo nos evitamos tener que declarar el tipo correcto, sobre todo en casos en los que no lo tenemos claro de antemano, como por ejemplo en consultas de LINQ, o en funciones polimórficas que devuelven diversos tipos que implementan la misma interfaz.

Así, por ejemplo, en el siguiente ejemplo el compilador infiere que la variable n es de tipo int y que s es de tipo string por el tipo de las constantes que se intenta asignar a cada una:

var n = 5; // equivale a int n = 5;
var s = "Hola";  // equivale a string s = "Hola";

Por supuesto, se mantienen en vigor las reglas del lenguaje para determinar el tipo de las expresiones:

var m = 3 * n;  // m es de tipo int
var dosPi = 2 * Math.PI;  // dosPi es de tipo double

El mecanismo también funciona para otros tipos cualesquiera:

var p1 = new Persona("Ana", 24);  // p1 es de tipo Persona
var p2 = p1;  // p2 también
var enteros = new List();  // enteros es de tipo List
var f1 = DateTime.Now.AddMonths(1);  // f1 es de tipo DateTime

Los siguientes son ejemplos de usos incorrectos de var:

var p;  // la inicialización es obligatoria
var q = null;  // imposible inferir el tipo de q
var z1 = 3, z2 = 5; // no se admiten declaraciones múltiples
var r = { 1, 2, 3 };
// un inicializador de array no está permitido

Es importante destacar que esta característica no tiene nada que ver con la que ofrecen algunos lenguajes dinámicos, en los que una variable puede almacenar valores de distintos tipos a lo largo de su tiempo de vida. En este caso  el compilador simplemente nos libera de la necesidad de especificar el tipo de una variable inicializada e infiere el tipo de la variable declarada mediante el identificador “especial” var a partir del tipo de la expresión que se le asigna.

La verificación estricta de tipos, uno de los pilares del lenguaje, sigue por supuesto en vigor, y la mejor manera de comprobarlo es, nuevamente, utilizando una herramienta como Reflector o DotPeek, que nos dejarán ver claramente que esas variables tienen un tipo concreto asignado por el compilador:

Declaracion_Dinamica_Var

En este caso se muestra cómo el compilador detecta el tipo correcto para cada variable en el primero de los ejemplos, más arriba.

La declaración implícita del tipo de una variable puede utilizarse también en otras construcciones del lenguaje, como el bucle foreach o la sentencia using:

foreach (var k in listaEnteros)  // k es de tipo int
    Console.WriteLine(k);

using (var con = new SqlConnection(cadenaConexion))
    // con es de tipo SqlConnection
{
    con.Open();
    // interactuar con la base de datos...
}

Mucha gente tiene miedo de utilizar esta construcción por creer que va a perder la comprobación estricta de tipos que ofrece el lenguaje. Como has podido ver, nada más lejos de la realidad, así que anímate a usarlo :-)

Fecha de publicación:
campusMVP campusMVP es la mejor forma de aprender a programar online y en español. En nuestros cursos solamente encontrarás contenidos propios de alta calidad (teoría+vídeos+prácticas) creados y tutelados por los principales expertos del sector. Nosotros vamos mucho más allá de una simple colección de vídeos colgados en Internet porque nuestro principal objetivo es que tú aprendas. Ver todos los posts de campusMVP
Archivado en: Lenguajes y plataformas

¿Te ha gustado este post?
Pues espera a ver nuestra newsletter...

Suscríbete a la newsletter

La mejor formación online para desarrolladores como tú

Comentarios (1) -

Bernal Arce Ramírez
Bernal Arce Ramírez

Estoy tratando de hacer esto:

private void usovariable()
        {
            m_contador = 100;
            m_variable = "pbox" + m_contador.ToString();  //+".Visible";
            // crear los niveles
            for (int i = 0; i < 10; i++)
            {

                &m_variable.Visible = false;
            }
        }
pero no se como hacer para asignar el .visible

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.