Tag Archives: icollection

A Magia das Interfaces

ICollection – Overview

Definição

O .NETFW oferece duas versões de ICollection, a System.Collections.ICollection e a System.Collections.Generic.ICollection T versão genérica para manipular coleções.

A Definição

A definição do tipo ICollection:

public interface ICollection : IEnumerable
{
    int Count { get; } 
    bool IsSynchronized { get; }
    Object SyncRoot { get; }
 
    void CopyTo(Array array, int index);
}

Note como o C# implementa esse grupo de coleção.

A ICollection herda de IEnumerable. Então, acessamos todos os membros da IEnumerable implementados em todas as classes que implementam a ICollection.

Para mais detalhes sobre métodos e propriedades. Consulte a documentação da MSDN.

Define o tamanho, os enums, e os métodos de sincronização para todas as coleções não genéricas.

ICollection T

Agora a versão genérica:

public interface ICollection<T> : IEnumerable<T>, IEnumerable
{
    int Count { get; }
    bool IsReadOnly { get; }
 
    void Add(T item);
    void Clear();
    bool Contains(T item);
    void CopyTo(T[] array, int arrayIndex);
    bool Remove(T item);
}

Note que ela se difere da versão não-genérico.

Ela define métodos para adicionar, remover e limpar uma coleção. A forma da implementação da sincronização também se difere.

Provavelmente, isso ocorreu devido à versão genérica dessa interface ter sido incorporada no. NET 2.0 enquanto que a versão não genérica foi adicionada no NET 1.1.

A Magia das Interfaces

Overview – IList

Definição

O .NETFW oferece duas versões de IList, a não genérica System.Collections.IList e a System.Collections.Generic.ICollection T versão genérica para manipular coleções.

A Definição

A definição do tipo IList não genérico:

public interface IList : ICollection, IEnumerable
{
    bool IsFixedSize { get; }
    bool IsReadOnly { get; }
    Object this[int index] { get; set; }
 
    int Add(Object value);
    void Clear();
    bool Contains(Object value);
    int IndexOf(Object value);
    void Insert(int index, Object value);
    void Remove(Object value);
    void RemoveAt(int index);
}

Veja que IList implementa ICollection e IEnumerable. Além disso, expõe métodos de coleção para adicionar, remover, limpar e posicionar os elementos dentro do conjunto.

Ela também expõe um indexador de objetos que permite acessar a coleção com []:

lista[index].propriedades 

ou genérica:

lista[index]

IList Generica

Agora a versão generica de IList:

public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
{
    T this[int index] { get; set; }
 
    int IndexOf(T item);
    void Insert(int index, T item);
    void RemoveAt(int index);
}

A ICollection T, possui mais métodos definidos na ICollection T do que na ICollection.

Ou seja, temos uma lista de membros da IList menor que o equivalente não genérica. Então temos métodos novos para acessar uma coleção com posicionamento específico.