miércoles, 21 de abril de 2010

Uso del @ en .Net

Uso del @ delante de un literal cadena
En una de las clases de la comunidad BogotaDotNet uno de los asistentes tuvo la inquietud de preguntar para que se utiliza el @ en una cadena, por lo cual me atrevo a presentar la siguiente explicación, que espero les sirva como aclaratoria, a aquellos que aún tiene dicha duda.
El uso más común, y útil de los dos usos que podemos darle a la arroba(@) dentro del código fuente, es que se utiliza para interpretar literalmente el contenido de la cadena, es decir, si una cadena tiene una arroba(@) justo antes de las comillas de apertura, la cadena se interpretará literalmente sin prestar atención a códigos de escape, saltos de línea, o cualquier otro símbolo que está contenga y que pudiera hacer protestar al compilador o hacer que éste interpretara de forma especial dichos símbolos.
Ejemplo:

Este ejemplo hará que los objetos apunten a un área de memoria que contenga las referencias a un objeto:
a->"BogotaDotNet Comunidad de Desarrollo";
b->"BogotaDotNet \t Comunidad de Desarrollo"
En caso por ejemplo de tener \n que significa un cambio de línea me presentara en pantalla, el siguiente resultado:
La aplicabilidad del @ sirve para para especificar rutas a ficheros, y un uso más avanzado podría ser la creación de código fuente (es decir, tener un programa que genere codigo fuente para hacer otro programa).

Uso de @ en una palabra reservada
Se pueden crear variables en el código fuente utilizando palabras reservadas, como por ejemplo si queremos llamar una clase como Class, debemos anteponerle el @ a la palabra reservada class para que C# lo interprete de manera diferente a la palabra reservada class. Algunas de las palabras clave que contiene C# o Visual Basic son las siguientes:

abstract, as, base, bool, break, byte, case, catch, char, checked, class, const, continue, decimal, default, delegate, do, double, else, enum, event, explicit, extern,false, finally, fixed, float, for, foreach, goto, if, implicit, in, int, interface, internal, lock, is, long, namespace, new, null, object, operator, out, override, params, private,protected, public, readonly, ref, return, sbyte, sealed, short, sizeof, stackalloc, static, string, struct, switch, this, throw, true, try, typeof, uint, ulong, unchecked, unsafe, ushort,using, virtual, void, while.


En versiones futuras, podrán adicionar aún más palabras. Para lo cuales se debe estar atento a los cambios. Es decir, el siguiente código fuente es perfectamente válido:

class @class
{
public static void @static(bool @bool)
{
if(@bool)
System.Console.WriteLine("true");
else
System.Console.WriteLine("false");
}
}
En el código anterior se usa @ para declarar una clase de nombre class con un método de nombre static que toma un parámetro de nombre bool, aun cuando todos estos nombres son palabras reservadas en C#.

Cabe aclarar que el carácter @: sólo puede preceder al nombre de un identificador, pero no puede estar contenido dentro del mismo. Es decir, identificadores como Bogota@net no son válidos.

Literales de carácter:
Prácticamente cualquier carácter se puede representar encerrándolo entre comillas simples. Por ejemplo, ‘a’ (letra a), ‘ ‘ (carácter de espacio), ‘?’ (símbolo de interrogación), etc.
Las únicas excepciones a esto son los caracteres que se muestran en la siguiente Tabla, que han de representarse con secuencias de escape:

Carácter Código de
escape especial
Comilla simple \’
Comilla doble \″
Carácter nulo \0
Alarma \a
Retroceso \b
Salto de página \f
Nueva línea \n
Retorno de carro \r
Tabulación horizontal \t
Tabulación vertical \v
Barra invertida \\
Tabla. Caracteres de Escape

 

Una prueba mas