domingo, 20 de agosto de 2017

Interfaces ICollection y IList en C# - Parte 1/2

Índice

1. Introducción
2. Palabras Clave
3. Generalidades
4. ICollection y ICollection<T>
4.1 ICollection
4.2 ICollection<T>
5. Conclusiones
6. Literatura & Enlaces

1. Introducción

En los artículos pudimos comprender que la implementación de la enumeración sólo permite el recorrido -en una direccion-, de una colección: se pasa por cada uno de los elementos sin llevar a cabo ninguna otra operación. Ahora veremos que es posible efectuar otras operaciones interesantes sobre colecciones: conteo, agregación, eliminación o copiado de elementos, y entre otras más. Para ello es necesario que nos adentremos en el estudio de dos interfaces que provee .NET Framework: ICollection e IList.

2. Palabras Clave

  • Colección
  • Interfaz
  • Jerarquía de herencia
  • Lista
  • Nivel de funcionalidad

3. Generalidades

Vale insistir con la presentación de la jeraraquía de herencia de estas interfaces:
Jerarquía de herencia de interfaces de colección
Figura 1. Jerarquía de herencia de interfaces de colección (Albahari, 2012).
Otra manera de comprender y orientar la utilidad de estas interfaces es a través de su grado o nivel de funcionalidad (Albahari, 2012):
  • Funcionalidad mínima: sólo enumeración -IEnumerable y IEnumerable<T>-
  • Funcionalidad media: conteo, comprobación de existencia, remoción, etc. -ICollection y ICollection<T>-
  • Funcionalidad máxima: acceso aleatorio a elementos, inserción o eliminación por índice, etc. -IList<T>, IDictionary<K, V>-.
En Albahari (2012) se comenta que "It's rare that you'll need to implement any of these interfaces. In nearly all cases when you need to write a collection class, you can instead subclass Collection<T>."; es decir que en lugar de hacer implementaciones particulares de las interaces que ofrecen los distintos niveles de funcionalidad, es preferible extender/heredar de la clase Collection<T>.

La primera parte de este artículo se enfocará en el uso de las interfaces ICollection<T> y ICollection. La segunda entrega se entenderá con los temas IList<T>IList, y IReadOnlyList<T>.

4. ICollection y ICollection<T>

4.1 ICollection

La interfaz ICollection (namespace System.Collections) es la clase base para tipos de datos no genéricos. Los miembros abstractos definidos (Albahari, 2012):
  • int Count { get; }
  • bool isSynchronized { get; }
  • object SyncRoot { get; }
  • void CopyTo(Array, int)
Como se evidenciará a continuación, la versión genérica provee, además de los miembros anteriores, elementos de programa para modificar el contenido de la colección y comprobación de existencia de un elemento en la colección.

Continuando, ICollection implementa la interfaz IEnumerable para recorrer o listar los elementos pertenecientes a la colección.

4.2 ICollection<T>

La interfaz ICollection<T> cuenta con los miembros abstractos para la definición de una colección de tipos de datos genéricos.


Esta interfaz especializa a las interfaces IEnumerable y IEnumerable<T> para el recorrido de los elementos; y por lo tanto permitir el uso del ciclo foreach para la iteración.

Comparte algunos miembros en común con su contraparte no genérica y los propios suyos:

public interface ICollection<T> : IEnumerable<T>, IEnumerable
{
    int Count { get; }

    bool Contains (T item);
    void CopyTo (T[] array, int arrayIndex);
    bool IsReadOnly { get; }

    void Add(T item);
    bool Remove(T item);
    void Clear();
}


Si una colección de elementos está destinada a ser de sólo lectura, se recomienda lanzar la excepción NotSupportedException sobre los métodos Add, Remove, Clear (Albahari, 2012).

5. Conclusiones

En este artículo hemos comprendido la jerarquía de herencia de interfaces de colecciones. Inclusive, comprendimos cómo a medida que se aumenta la especialización o descendencia, los niveles de funcionalidad en las interfaces implementadoras aumentan. Al final observamos las propiedades y los métodos abstractos de las interfaces ICollection -no genérica- y ICollection<T> -genérica: destacando sus similitudes y diferencias sobresalientes.

8. Literatura & Enlaces

Albahari, J., Albahari, B. (2012). C# 5.0 in a Nutshell. United States: O'Reilly Media.
ICollection Interface (System.Collections) (2017). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.collections.icollection(v=vs.110).aspx
Enumeración e Interfaces IEnumerator e IEnumerable en C# (2017). Recuperado desde: https://ortizol.blogspot.com.co/2017/08/enumeracion-e-interfaces-ienumerator-e-ienumerable-en-csharp.html
ICollection(T) Interface (System.Collections.Generic) (2017). Recuperado desde: https://msdn.microsoft.com/en-us/library/92t2ye13(v=vs.110).aspx#Syntax


O

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.