¿Qué es una clase de colección en C#?
Una colección incluye múltiples elementos, es decir, hay un objeto de clase de colección y n objetos de elemento.
-
Debido a que cualquier clase de colección implementa la interfaz IEnumerable, cualquier objeto de clase de colección tiene un método GetEnumerator(), que puede devolver un objeto que implementa la interfaz IEUMERATOR. El objeto IEUMERATOR devuelto no es un objeto de clase de colección ni un objeto de clase de elemento de la colección, sino un objeto de clase independiente. A través de este objeto, puede iterar a través de cada objeto elemento en el objeto de clase de colección.
Si la clase de colección está definida por el usuario, el usuario debe implementar su método GetEnumerator(); de lo contrario, no se pueden utilizar bucles. Por supuesto, la clase IEnumerator correspondiente a esta clase de colección personalizada (la clase que implementa la interfaz) también debe personalizarse.
Por ejemplo, el IEnumerator correspondiente a la clase de colección ArrayList es ArrayListEnumeratorSimple.
El IEnumerator correspondiente a la clase de colección de matrices es SZArrayEnumerator.
(Estas dos clases no se presentan en la documentación de la biblioteca de clases de Net Framework (msdn).)
-
En 1. Las interfaces que representan el comportamiento de las colecciones son:
1) I Collection
Define el tamaño, la enumeración y los métodos de sincronización de todas las colecciones. Derivado de IEnumerable
Define el comportamiento más básico de las clases de colección. Todas las clases de colección implementan esta interfaz (interfaz base).
Pero su comportamiento es demasiado básico: es principalmente una propiedad Count, por lo que no tiene mucho sentido implementarla sola.
2)IEnumerable
Expone enumeradores que admiten iteraciones simples de colecciones.
Tiene un solo método, GetEnumerator(), que puede devolver una interfaz IEnumerator a través de la cual se puede atravesar la colección.
Básicamente todas las clases de colección implementan esta interfaz.
3) IList
La implementación de IList es un conjunto de valores que se pueden ordenar y acceder por índice. Ella misma implementa las interfaces ICollection e IEnumerable.
Es la clase base abstracta para todas las listas. Hay tres tipos de implementaciones de IList: de solo lectura, de tamaño fijo y de tamaño variable.
4) Diccionario
La implementación de IDictionary es una colección de pares clave/valor, que a su vez implementa las interfaces ICollection e IEnumerable.
Es la interfaz base para una colección de pares clave/valor. Hay tres tipos de implementaciones de IDictionary: de solo lectura, de tamaño fijo y de tamaño variable.
Un IDictionary puede denominarse diccionario, mapa o tabla hash, que accede a valores en función de claves (de cualquier tipo).
-
2. La clase de colección puede estar directamente en 2. sistema. La colección es:
1) La interfaz implementada por la lista de matrices: IList, ICollection, IEnumerable.
ArrayList puede admitir de forma segura varios lectores al mismo tiempo siempre que no se modifique la colección.
A medida que se agregan elementos a ArrayList, la capacidad aumenta automáticamente (en un factor de 2) mediante la reasignación según sea necesario.
Si necesita crear una matriz de objetos, pero el tamaño de la matriz no se puede conocer de antemano, puede usar ArrayList.
ArrayList hace referencia a todos los elementos como objetos, por lo que se requiere conversión de tipo al acceder a elementos de ArrayList.
Ventajas: Cambios de tamaño dinámicos, inserción y eliminación de elementos flexibles y convenientes, y clasificación.
Desventajas: el rendimiento durante la inserción no es tan bueno como el de las matrices y no está fuertemente tipado.
2) BitArray
Interfaz implementada: ICollection, IEnumerable.
Administra una matriz empaquetada de valores de bits.
3) Tabla hash
Interfaces implementadas: IDictionary, ICollection, IEnumerable.
Puedes agregar y eliminar elementos en Hashtable libremente. Algunos elementos son similares a ArrayList, pero no hay tanta sobrecarga de rendimiento.
4) Lista ordenada
Interfaces implementadas: IDictionary, ICollection, IEnumerable.
SortedLIst tiene en cuenta las ventajas de ArrayList y Hashtable y se puede ordenar por valor clave.
5) Cola
Interfaz implementada: ICollection, IEnumerable.
Queque es una cola que accede a cada elemento por orden de entrada.
Puedes llamar al método GetEnumerator() del objeto Queque para permitir que el objeto IEnumerator atraviese los elementos de la cola.
6) Pila
Interfaz implementada: ICollection, IEnumerable.
La pila es una pila y se accede a cada elemento por orden de último en entrar, primero en salir.
Puedes llamar al método GetEnumerator() del objeto Stack para permitir que el objeto IEnumerator atraviese cada elemento de la pila.
-
3. Las clases de colección anteriores son todas clases de colección generales y la mayoría de los elementos que aceptan son tipos de objetos. Cuando se coloca un objeto,
la información del tipo original se pierde después de que se crea la colección, es decir, estas clases de colección generales no están fuertemente tipadas.
La solución es utilizar clases de colección fuertemente tipadas.
Clases CollectionBase, DictionaryBase, ReadOnlyCollectionBase bajo el sistema. Espacio de nombres de la colección.
Algunas clases bajo el sistema. recolectar. Los espacios de nombres especializados son suficientes y pueden usarse directamente o heredarse. Si cree que un artículo viola sus derechos o los derechos de otros, contáctenos.