Resumen Tipos y colecciones
Enviado por daniadiana • 18 de Junio de 2013 • 20.648 Palabras (83 Páginas) • 396 Visitas
Resumen 1/7: Tipos y colecciones.
Tipos por valor:
· Los tipos por valor son espacios de memoria en el stack.
· Los tipos por valor contienen sus datos directamente, ofreciendo un excelente rendimiento. En cualquier caso, están limitados a tipos que almacenan datos de tamaño reducido. En el .Net Framework, todos los tipos por valor son de 16 bytes ó más pequeños.
· Se pueden crear tipos definidos por el usuario mediante estructuras para almacenar múltiples valores y métodos.
· Los tipos por valor no pueden ser null.
· Puedes declarar una variable de tipo por valor como Nullable (‘Nullable<int> i = null’ ó ‘int? I =null’);
· Las enumeraciones mejoran la legibilidad del código enmascarando mediante símbolos un grupo de valores.
Tipos por valor comunes:
Tipo (alias) 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:
· Los tipos por referencia contienen la dirección del dato más que el dato en si, este se ubica en el heap.
· Una variable siempre es un espacio en el stack, en el caso de los tipos por referencia contiene la dirección en el heap del objeto y en el caso de tipos por valor contiene el dato directamente.
· Generalmente los tipos de los que se conoce previamente su tamaño son por valor y los que no por referencia.
· Cuando se asigna un tipo por valor, se crea una segunda copia del valor. Cuando se asigna un tipo por referencia, solo se copia el puntero, es decir, la dirección de memoria del heap donde esta el objeto. De esta manera, si copias un tipo por referencia y modificas la copia, ambas variables son modificadas.
· El recolector de basura (GarbageCollector, GC) reclama periódicamente la memoria de los objetos desreferenciados. Se ejecuta de forma no determinística pero puede ser invocado con el método GC.Collect().
· El método GC.KeepAlive() previene de que el GC reclame la memoria usada por un objeto aunque esté desreferenciado.
· Los String son inmutables, cada vez que se asigna un nuevo valor ó se modifica la variable String, un nuevo objeto String es creado en el heap.
· Usa la clase StringBuilder para crear cadenas dinámicamente, es una clase optimizada para ello sin el overheap que produce String.
· Usa streams para leer y escribir archivos, memoria y de la red.
· El método Array.Sort() permite ordenar arrays unidimensionales.
· La sentencia ‘throw’ permite lanzar excepciones.
· Usa el bloque try-catch para filtrar excepciones por tipo y el bloque try-finally para con Close y Dispose para liberar recursos. También puedes combinarlos en un try-catch-finally.
· Las excepciones se capturan de más específica a menos.
Clases:
· Usa la herencia para crear nuevos tipos basados en otros existentes.
· Usa interfaces para definir un grupo de miembros que deben estar implementados en tipos relacionados.
· Las clases parciales dividen la definición de una clase en múltiples archivos.
· Los eventos permiten ejecutar un determinado método cuando algo ocurre en una sección diferente del código.
· Usa atributos para describir ensamblados, tipos y miembros.
· El Type Forwarding (reenvio de tipos) permite indicar la existencia de un tipo en otro ensamblado distinto.
· Usa el atributo TypeForwardedTo para mover un tipo de una librería de clases a otra haciendo Type Forwarding.
Interfaz
IComparable Implementada por aquellos tipos que pueden ordenarse, como por ejemplo, las clases numéricas y string. (Generics)
IComparer Proporciona una forma de personalizar el criterio de ordenación de una colección.
IDisposable Define métodos para preparar la liberación de un objeto. Esta interfaz es importante para objetos de gran tamaño que consume recursos u objetos que bloquean el acceso a recursos como las bases de datos.
IConvertible Habilita a una clase para ser convertida en un tipo base como Bolean, Byte, Double ó String.
ICloneable Habilita que el objeto sea copiado.
IEquatable Permite comparar la equidad de dos clases.
IFormattable Habilita el converter el valor de un objeto en una cadena de formateo especial.
Conversión de tipos:
· El .Net Framework puede convertir automáticamente entre sus tipos integrados. Conversiones sin pérdida de precisión (widening conversión) son implícitas tanto en VB como en C#, las conversiones con pérdidas de precisión (narrowing conversions) requieren una conversión explícita en C#, mientras que en VB se permiten por defecto.
· Boxing permite que cualquier tipo pueda ser tratado como un tipo por referencia, consiste en mover el dato al heap y referenciar su dirección en el stack. Unboxing es el proceso contrario. De esta forma se pueden encapsular tipos por valor en tipos por referencia y viceversa.
· Debes especificar operadores de conversión para habilitar la conversión en tipos propios.
Colecciones:
· ArrayList es una colección simple de objetos sin ordenar.
o Los métodos Add y AddRange sirven para añadir elementos al ArrayList.
o Los métodos Insert e InsertRange sirven para insertar elementos en el ArrayList.
o Los métodos Remove y RemoveAt sirven para eliminar elementos del ArrayList.
· El indicador de la colección puede usarse para iterar por la colección.
· Las interfaces IEnumerable y IEnumerator pueden usarse para iterar por la colección también.
· La instrucción foreachr usa la interfaz IEnumerable para iterar sobre una colección.
Listas secuenciales:
· La clase Queue es una colección de tipo cola FIFO.
...