1
resposta

IList , List e ICollection . Quando usar cada um deles?

No curso vimos que podemos declarar uma lista de várias formas, sendo elas

List listaC = new List(); IList lista = new List(); ICollection colecao = new List();

Para qual caso cada uma delas é indicada ? E uma dúvida mais específica é, qual a real diferença entre declarar List listaC = new List(); e assim IList lista = new List(); ?

1 resposta

Olá, Joshua! Sua pergunta é muito pertinente e é um ponto comum de confusão para muitos estudantes.

Vou tentar esclarecer suas dúvidas sobre List<T>, IList<T> e ICollection<T>.

  1. List<T>: É uma classe concreta. Ela implementa as interfaces IList<T>, ICollection<T>, IEnumerable<T>, e outras. List<T> é uma coleção de objetos que podem ser acessados por índice. Ele fornece métodos para pesquisar, ordenar e manipular listas.

  2. IList<T>: É uma interface que a classe List<T> implementa. Ela representa uma coleção de objetos que podem ser acessados individualmente por índice. Se você quiser ter a flexibilidade de mudar sua implementação de List<T> para outro tipo de lista no futuro, você pode declarar sua lista como IList<T>.

  3. ICollection<T>: É uma interface que IList<T> herda. Ela representa uma coleção genérica de objetos que podem ser individualmente acessados. Se você só precisa adicionar/remover itens, ou fazer algumas pequenas operações que não envolvem indexação (como você faria com IList<T>), então você pode usar ICollection<T>.

Agora, sobre a diferença entre declarar List<string> listaC = new List<string>(); e IList<string> lista = new List<string>();:

A principal diferença aqui é que no primeiro caso você está usando uma classe concreta (List<T>), e no segundo caso você está programando para uma interface (IList<T>). Quando você programa para uma interface, você tem a flexibilidade de mudar a implementação a qualquer momento. Por exemplo, se você decidir no futuro que List<T> não está atendendo às suas necessidades e você quer usar LinkedList<T> em vez disso, você pode facilmente fazer isso se estiver programando para a interface IList<T>.

Espero ter ajudado e bons estudos!