Los tipos de datos en .NET los podemos catalogar en 2 grandes grupos. Por valor y por Referencia.
TIPOS POR VALOR:
- Los tipos por valor son espacios en el Stack (Pila) cuando son variables locales y expresiones intermedias y en el Heap (Monton) en el resto de situaciones (Globales y Estaticas)
- Contienen sus datos directamente, ofreciendo un excelente rendimiento
- El tamaño maximo es de 16 bytes
- Estructuras y Enumeraciones son Tipos por valor definidos por el usuario, y se comportan exactamente igual que los demas.
- Los tipos por valor no pueden ser "null"
- Puedes declarar un tipo por valor como "Nullable" (Que puede ser null) asi: Nullable
nombre=null; O de esta otra manera int?nombre=null; - Heredan todos de System.ValueType
- La memoria asignada de estos tipos se elimina cuando esta fuera de ambito en el Stack, y mediante el Colector de basura (Garbage collector) cuando esta en el Heap (Desapareciendo con la clase a la que esta asociada)
| Tipo | Bytes | Rango |
| Char (char) | 2 | |
| bolean (bool) | 4 | |
| IntPtr | ? | |
| DateTime (date) | 8 | 1/1/0001 12:00:00 AM a 12/31/9999 11:59:59 PM |
| SByte (sbyte) | 1 | -128 a 127 |
| Byte (byte) | 1 | 0 a 255 |
| Int16 (short) | 2 | -32768 a 32767 |
| Int32 (int) | 4 | -2147483648 a 2147483647 |
| UInt32 (uint) | 4 | 0 a 4294967295 |
| Int64 (long) | 8 | -9223372036854775808 a 9223372036854775807 |
| Single (float) | 4 | -3.402823E+38 a 3.402823E+38 |
| Double (double) | 8 | -1.79769313486232E+308 a 1.79769313486232E+308 |
| Decimal (decimal) | 16 | -79228162514264337593543950335 a 79228162514264337593543950335 |
TIPOS POR REFERENCIA
- Cuando declaramos una variable de tipo objeto, se crea una referencia en el stack, y al crear la instancia en el heap por medio del operador "new", su dirección en memoria se asigna a la susodicha variable. De esta forma se puede acceder al valor del objeto por medio de la referencia.
- Si copias un tipo por referencia, y modificas la copia, ambas variables, copia hija y copia madre, seran cambiadas.
- Los String son inmutables. Cuando un String es modificado, un nuevo objeto se crea en el Heap con las caracteristicas del nuevo String, sustituyendo al antiguo String
- Heredan todos de System.Object
- Como ya hemos dicho, estos objetos almacenados en el Heap, son eliminados por el Colector de basura.
Console.WriteLine(8.ToString());
Que quizas ahora no sirva de mucho, ya que sin el .ToString() obtendriamos la misma salida, cuando avanzemos mas en el lenguaje veremos como hay ocasiones en las que usaremos el boxing para cosas mas interesantes.
CONVERSIO DE TIPOS
Conversion Implicita: (Widening Conversion) Aquella para la cual no necesitamos de ningun otro mecanismo de conversion mas que el simbolo de asignacion. Solo nos permitira este tipo de conversion si el valor que queremos convertir es menor al valor convertido. Me Explico...:
int a=10;
double b=10.0000005
a=b; //No Permitido
b=a; //permitido
Conversion Explicita: (Narrowing Conversion) Es la contraria a la implicita, la que necesitamos en el caso de que el valor a convertir no sea compatible con el valor convertido. Para ello usaremos el tipo al que queremos "pasarlo" entre parentesis (Igual que en C++).
a=(int) b; //Ahora si nos dejaria

No hay comentarios:
Publicar un comentario