He de aceptarlo, una de las cosas que más dudas me causaba cuando inicié a programar usando C# era sobre cuál era la diferencia entre usar string o System.String, la idea que yo tenía al respecto que estaba totalmente equivocada. Tenía la mala creencia de que string y String (sí, la diferencia es la mayúscula inicial) eran cosas un tanto distintas cuando resulta que no es así.

Alias

Resulta que string y System.String (o simplemente String) son lo mismo, es decir, en nuestro código podemos fácilmente intercambiar ambas palabras sin problema alguno. Por poner otro ejemplo, usando el alias para Int32, podemos escribir de cualquiera de las dos siguientes maneras y el código significará lo mismo.

```csharp int abc = 123; Int32 xyz = 123; ```
```csharp Int32 abc = 123; int xyz = 123; ```

¿Referencias o valores?

Como parte de mis falsas creencias, pensaba que al usar System.Int32 estaba creando tipos de dato por referencias (o envoltorios, como en Java) con todo lo que eso representa, pero repito: No es así. Todos los tipos de valor permanecen así independientemente de cómo los hayamos declarado. Eso sí, no olvides que string y por tanto String son un tipo de referencia. Abajo pongo una tabla con algunos alias de C#:

Alias Framework Tipo
int System.Int32 Valor
bool System.Boolean Valor
float System.Single Referencia
object System.Object Referencia

¿Para qué existen?

Puede que te estés preguntando eso, y la verdad es que no sé. Muchos sugieren que es por cuestión de hábito, ya que los alias se parecen (si no es que son iguales) a las declaraciones de variables para lenguajes de programación más antiguos que C#, como C o C++. Para un programador sería más sencillo migrar de un lenguaje a otro si encuentra cosas parecidas a las que está acostumbrado, aunque sean detalles pequeños como este.

¿Cuál es correcto?

Al significar lo mismo en términos de programación su uso es cuestión de gustos, pero yo prefiero usar el alias para declarar variables, tipos de dato de retorno y parámetros de método. Mientras que prefiero usar el nombre "completo" para hacer referencia a métodos y constantes de cada tipo, por ejemplo

```csharp // Yo prefiero... int abc = Int32.Parse("123"); string emptyString = String.Empty; ```
```csharp // ... a esto Int32 abc = int.Parse("123"); String xyz = string.Empty; ```

Lo que sigue

En el siguiente post les platicaré de una forma en la que podemos crear nuestros propios alias y así también tomar ventaja de las características que nos ofrece el lenguaje.