Capitulo 3.1 - Elementos del Lenguaje C#

Secuencias de Escape utilizadas en el lenguaje C#

Secuencia Caracter Definicion
\0 NUL Caracter Nulo
\n CR + LF Ir al principio de la Linea Siguiente
\t HT Tabulador Horizontal
\b BS Retroceso (Backspaces)
\r CR Retorno de Carro sin avanze de linea
\f FF Alimentacion de pagina (Solo para impresora)
\' ' Comilla Simple
\'' '' Comilla Doble
\\ \ Barra Invertida(backslash)
\0dd Caracter ASCII. Representacion Octal
\xdd Caracter ASCII. Representacion Hexadecimal
\udddd Caracter UNICODE. Representacion Hexadec.
\a BEL Alerta, pitido(\u0007)
\u VT Tabulador Vertical(\u0008)

TIPOS

Los tipos en C# se clasifican en tipos : Valor y Refencia. Una variablke de tipo valor alamcena directamente un valor (dato en general) mientras que una variable de un tipo referencia lo que permite almacenar es una referencia a un objeto(posicion de memoria donde esta el objeto)

int suma = o; //Suma almacena un enetero

CCuenta cta = null // cta permitira alamcenar una referencia a un objeto CCuenta

Tanto las clases como las matrices, intrefaces y delegados son tipos refrencia.

En cuanto a los tipos valor se clasifican en las siguientes 3 formas : los tipos primitivos , las estrucutras y los tipos enmuerados

Los tipos primitivos se clasifican en tipo enteros, tipos reales y tipo bool.

Lista de tipos primitivos

La siguiente lista contiene los tipos (primitivos):

Tipo en C# Tipo de .NET Framework CLS-Compliant Descripción Valor por defecto
object System.Object Si Tipo base para todos los otros tipos N/A
bool System.Boolean Si 1 bit; representa true (verdadero) o false (falso) false
Enteros
byte System.Byte Si 8 bit; entero sin signo 0
sbyte System.SByte No 8 bit; entero con signo 0
short System.Int16 Si 16 bit; entero con signo 0
ushort System.UInt16 No 16 bit; entero sin signo 0
int System.Int32 Si 32 bit; entero con signo 0
uint System.UInt32 No 32 bit; entero sin signo 0
long System.Int64 Si 64 bit; entero con signo 0L
ulong System.UInt64 No 64 bit; entero sin signo 0
Decimales
float System.Single Si 32 bit; IEEE valor decimal 0.0F
double System.Double Si 64 bit; IEEE valor decimal 0.0D
decimal System.Decimal Si 128 bit valor decimal
(1 bit signo; 96 bit valor; 8 bit exponente; 23 bit sin uso)
0.0M
Caracteres
char System.Char Si 16 bit Caracter Unicode \0
string System.String Si Matriz de caracteres N/A*


Literal NULL 0
Tipos anulables


Un Tipo anulable puede representar todos los valores de determinado tipo más la capacidad de poder contener un valor null. Es una nueva característica en C# 2.0. Es una instancia de la estructura System.Nullable. Sólo pueden ser usados con los tipos por valor, ya que los tipos por referencia soportan el valor nulo.

La razón para usar Tipos anulables es para superar el problema de no estar apto para determnar fácilmente si un tipo por valor está vacío o indefinido. Diferente que a los tipos por referencia (que se les puede asignar el valor null) null no es asignable a tipos por valor primitivos.

NOTA: Los tipos bool anulables, en una sentencia if, while, for, o alguna otra sentencia lógica o de iteraciones, será equivalente null a false; no lanzará un error.

Por ejemplo, el siguiente código puede causar un error en tiempo de compilación:

int varA = null;
// Error: no se puede convertir en nulo
// 'int' porque es un tipo por valor que no es anulable

Usar Tipos anulables como una solución consistente para determinar si un tipo por valor está vacío o indefinido.

Se pueden declarar Tipos anulables de las siguientes dos formas:

System.Nullable variable;   // 1era manera

T? variableName; // 2nda manera

Donde T es el tipo del Tipo anulable. T puede ser cualquier tipo por valor incluyendo struct; pero, este no puede ser un tipo por referencia. Por ejemplo:

int?    i = 10;
double? d1 = 3.14;
bool? bandera = null;
char? letra = 'a';
int?[] arr = new int?[10];

Miembros de los tipos anulables

Miembors fundamentales:

Propiedades
HasValue Pública de sólo lectura. El tipo es bool. True si la variable no contiene un valor nulo.
Value Pública de sólo lectura. El tipo es el tipo indicado. Si HasValue es true, entonces Value contiene un valor significante. Si HasValue es false, accediendo a Value lanzará una InvalidOperationException.
Métodos
GetValueOrDefault Devuelve el valor del objeto o el valor predeterminado (en el caso de que el valor sea null) del objeto o del especificado en el parámetro opcional T.

Para probar los tipos anulables:

int? x = 10;
if (x.HasValue)
{ System.Console.WriteLine (x.Value); }
else
{ System.Console.WriteLine ("Indefinido"); }

// -o-

if (x != null)
{ System.Console.WriteLine (x.Value); }
else
{ System.Console.WriteLine ("Indefinido"); }


int? NumeroN = null;
int Numero = NumeroN.GetValueOrDefault(); // El valor predeterminado es 0
NumeroN = 146;
Numero = NumeroN.GetValueOrDefault(); // El valor es 146

Uso

La necesidad de este planteo sirve para interactuar con bases de datos SQL, las cuales sus celdas pueden contener también un valor null.

Si querés especificar tu propio valor predeterminado, puedes usar el operador ??. El operador ?? devolverá el valor de la declaración de la izquierda si este no es nulo y si lo es devolverá el valor dado del lado derecho del ??.

int? NumeroN = null;
int Numero = NumeroN ?? -1; // Numero es -1
NumeroN = 146;
Numero = NumeroN ?? -1; // Numero es 146

Otra posibilidad para obtener el valor es usar la propiedad Value. Esta propiedad lanzará una excepción System.InvalidOperationException si el valor es null. Para evitar esta excepción, puedes, también, usar la propiedad HasValue que devuelve un valor bool para comprobar si el valor es nulo o no. Si el valor de retorno de HasValue es false, entonces el valor de la variable es null.