Quando usar um List e um IList?
Qual é a diferença prática?
Quando usar um List e um IList?
Qual é a diferença prática?
Oi Mariana, esse é o caso clássico de uso da interface em vez de alguma coisa mais específica. A ideia de usar um IList é que você trocar a especialização em algum momento. Geralmente é mais usada em retornos de métodos... pq aí você pode trocar a implementação interna retornada sem mexer no retorno do método.
Oi Mariana.
Você já ouviu falar em API? Caso não, imagina uma API como um serviço que uma aplicação pode consumir pela web. Segue um exemplo de API bem simples que fiz uma vez para estudo:
http://paschoali-todo.azurewebsites.net/api/Tasks
Se você acessar esse link, ele te retorna uma lista de tarefas (Tasks) em um formato específico (no caso, JSON).
Pois bem, eu desenvolvi essa API e o retorno do método que esse link chama é um List
. Vamos supor que eu estivesse utilizando essa chamada da API em uma aplicação minha e, de repente, quisesse mudar o tipo de retorno desse método na API. Agora quero que retorne uma lista diferente que eu criei, não mais essa lista genérica List<T>
. Consegue enxergar o que aconteceria? Eu teria que mudar na aplicação também, pois ela já está pronta para receber List<T>
e não a nova lista que eu criei.
É aí que entra o conceito do interface. Para não ter esse tipo de problema, eu posso alterar o retorno da API para IList<T>
e na aplicação receber essa interface também. Dessa forma, eu posso retornar qualquer lista no método, desde que a classe dessa minha lista implemente a interface IList<T>
. Ou seja, sempre que eu tenho uma classe que implementa interface x, eu posso retornar essa classe em um método que retorna a interface x. Isso é possível porque a interface é um contrato. Uma vez que eu implemente uma interface em uma classe, eu a obriga a implementar todos os métodos dessa interface. É por esse motivo que eu posto retornar a classe y (que implementou interface x) em um método que retorna a interface x, pois tenho a garantia que todos os métodos da interface estão implementados.
Enfim, é mais ou menos por aí. Se ficou muito confuso, posso tentar explicar de outra forma, mas a questão é que interface é o segredo. Se for utilizar só em métodos internos, não tem diferença alguma utilizar o List<T>
. A interface é uma boa jogada em casos que vai expor o método, tipo no caso da API que eu mencionei. Você garante que alterações no retorno da API não obrigue alterações em todos os locais que chame essa API.
Ahhh, falei demais.