Resumen Tipos y colecciones
daniadiana18 de Junio de 2013
20.648 Palabras (83 Páginas)424 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.
o El método Enqueue añade un item al final de la cola.
o El método Dequeue saca un item del principio de la cola.
o El método Peek obtiene un item del principio de la cola sin sacarlo de ella.
· La clase Stack es una colección de tipo cola LIFO.
o El método Pop saca un item del principio de la cola.
o El método Push añade un item al principio de la cola.
o El método Peek obtiene un item del principio de la cola sin sacarlo de ella.
Colecciones Diccionario:
· La interfaz IDictionary provee la forma de comunicarse con todas las colecciones de tipo diccionario.
· La clase Hashtable puede usarse para crear tablas de consulta.
o El método GetHash heredado de Object provee la clave por la que se coleccionan los objetos.
o No puede ser accedida por índice.
· La clase DictionaryEntry representa el par Key y Value dentro de una colección de tipo diccionario.
· La clase SortedList puede usarse para construir colecciones de tipo diccionario ordenadas por clave.
· La interfaz IEqualityComparer puede usarse para construir valores hash y comparar dos objetos cualquiera para comprobar su equidad.
· La clase ListDictionary es como la Hastable pero más eficiente en colecciones pequeñas.
· La clase HybridDictionary implementa una ListDictionary mientras que la colección es pequeña, pero cuando aumenta suficiente de tamaño se convierte en una Hastable.
· La clase OrderedDictionary es como un Hastable solo que los elementos de la colección se ordenan de forma ordinal, pudiendo acceder a ella por índice numérico.
Colecciones Especializadas:
· Se encuentran en System.Collections.Specialized.
· La clase BitArray y la estructura BitVector32 pueden usarse para realizar operaciones a nivel de bit sobre una serie de valores boléanos.
· Las clases StringCollection y StringDictionary son type-safe (de tipo seguro) para almacenar strings.
· Se pueden crear versiones case-insensitive de Hastable y SortedList usando la clase CollectionsUtils.
· La clase NameValueCollection es útil para almacenar más de un Value por Key en una colección por name/value.
Colecciones Genéricas:
· Las colecciones genéricas pueden usarse para crear colecciones más rápidas y type-safe que sus equivalentes no-genéricas.
· Se encuentran en System.Collections.Generics.
· Las clases genéricas List, Dictionary, Queue, Stack, SortedList y SortedDictionary son versiones genéricas de sus equivalentes no-genéricos ArrayList, Hastable, Queue, Stack y SortedList respectivamente.
·
...