C# - Comparando IList<T> com List<T>
Neste artigo eu fazer algumas comparações entre a interface genérica IList<T> e a classe genérica List<T>. |
A interface IList é uma coleção de objetos não genéricos que podem ser individualmente acessada pelo índice. A interface IList é implementada a partir das interfaces : ICollection e IEnumerable.
Por natureza IList armazena sempre object. Assim mesmo inicializando com um valor inteiro o valor será armazenado como object.
A interface IList<T> é a coleção de objetos genéricos representados pelo tipo T e implementa diversas interfaces incluindo a interface IList.
Em uma interface IList<T> podemos usar somente o tipo definido por T enquanto que em uma interface IList<> podemos usar diferentes tipos de objetos.
Nota : A razão pela qual List<T> implementa tanto IList<T> como IList é torná-la utilizável em qualquer lugar no seu código onde esta assumindo um IList.
A interface genérica IList<T> é descendente da interface ICollection<T> e é a interface base de todas as listas genéricas.
Assim IList<T> é uma interface implementada por List<T> então lembre-se que você não pode criar uma instância de uma interface logo temos que:
//Não vai compilar IList<Cliente> listaCliente = new IList<Cliente>(); |
//Vai compilar List<Cliente> listaCliente = new List<Cliente>(); |
//Também vai compilar IList<Cliente> listaCliente = new List<Cliente>(); |
A seguir temos as propriedades da interface IList<T> :
Nome | Descrição |
Count | Obtém o número de elementos contidos em ICollection<T>. |
IsReadOnly | Obtém um valor indicando se a ICollection<T> é somente leitura. |
Item | Obtém ou define o elemento no índice especificado. |
Os métodos desta interface são:
Nome | Descrição |
---|---|
Add | Adiciona um item para o ICollection<T>. |
Clear | Remove todos os itens a partir do ICollection<T>. |
Contains | Determina se a ICollection<T> contém um valor específico. |
CopyTo | Copia os elementos da ICollection<T> para um Array, iniciando em um determinado índice. |
GetEnumerator | Retorna um enumerador que itera pela coleção. (Herdado de IEnumerable<T>.) |
IndexOf | Determina o índice de um item específico na IList<T>. |
Insert | Insere um item para o IList<T> no índice especificado. |
Remove | Remove a primeira ocorrência de um objeto específico a partir do ICollection<T>. (Herdado de ICollection<T>.) |
RemoveAt | Remove o item IList<T> no índice especificado. |
Além disso a interface
IList<T> possui dezenas de métodos de extensão como :
Aggregate<T>(Func<T, T, T>), AsEnumerable<T> ,
AsQueryable() , Contains<T>(T), First<T>() , GroupBy<T, TKey>(Func<T, TKey>),
Intersect<T>(IEnumerable<T>), etc.
Listas e arrays implementam IList. Esta interface é uma abstração que
permite que os tipos de lista possam ser usados através de um único tipo de
referência. Com ele, podemos criar um método único para receber um int[] ou um List<int>.
Abaixo vemos um exemplo de utilização básica da interface List<T> :
using System;
using System.Collections.Generic;
namespace CSharp_IList
{
class Program
{
static void Main(string[] args)
{
int[] array = new int[3];
array[0] = 1;
array[1] = 2;
array[2] = 3;
Exibir(array);
List<int> lista = new List<int>();
lista.Add(5);
lista.Add(7);
lista.Add(9);
Exibir(lista);
}
static void Exibir(IList<int> lista)
{
Console.WriteLine("Count = {0}", lista.Count);
foreach (int valor in lista)
{
Console.WriteLine(valor);
}
Console.Readkey();
}
}
}
|
Module Module1
Sub Main()
Dim array(2) As Integer
array(0) = 1
array(1) = 2
array(2) = 3
Exibir(array)
Dim lista As New List(Of Integer)()
lista.Add(5)
lista.Add(7)
lista.Add(9)
Exibir(lista)
End Sub
Private Sub Exibir(ByVal lista As IList(Of Integer))
Console.WriteLine("Count = {0}", lista.Count)
For Each valor As Integer In lista
Console.WriteLine(valor)
Next valor
Console.ReadKey()
End Sub
End Module
|
|
|
Basicamente, IList<T> pode por implementada por qualquer classe (inclusive por List<>). Portanto, usar IList<T> para os parâmetros e propriedades torna o acoplamento mais baixo, o que geralmente é uma coisa boa.
Se você esta expondo suas classes através de uma library que outros irão usar, é melhor expor suas classes via interfaces (IList<T>) do que implementações concretas, ou seja, usando List<T>.
Então qual devo usar ?
IList<T> ou List<T> ?
Nota: Considere o princípio: "dependa sempre de uma abstração e não de uma implementação";
João 5:24 Na verdade, na verdade vos digo que quem ouve a minha palavra, e crê naquele que me enviou, tem a vida eterna, e não entrará em condenação, mas passou da morte para a vida.
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
VB .NET - Realizando operações com List(of T) - Macoratti.net