Pergunta

Eu tenho classe método que retorna uma lista de funcionários que eu possa iterar.Qual é a melhor maneira de voltar para a lista?Normalmente eu acabei de voltar de um ArrayList.No entanto, como eu entendo, as interfaces são mais adequados para este tipo de ação.Qual seria a melhor interface para usar?Também, por que é melhor para retornar uma interface, em vez de implementação (dizem que objeto ArrayList)?Parece que muito mais trabalho para mim.

Foi útil?

Solução

Pessoalmente, gostaria de usar um Lista<Employee> para criar a lista no back-end e, em seguida, usar IList quando você retornar.Quando você usar interfaces, ele dá a você a flexibilidade para mudar a implementação sem ter que alterar quem está usando o seu código.Se você queria ficar com uma ArrayList, que seria um não-genérico IList.

Outras dicas

@ Jason

Assim como você pode retornar IList<> porque uma matriz, na verdade, implementa esta interface.

A melhor maneira de fazer algo como isso seria voltar, como você diz, uma Lista, preferencialmente, com a utilização de medicamentos genéricos, de modo que seria da Lista<Employee>.

Retornando uma Lista em vez de um ArrayList significa que, se mais tarde você decidir usar, digamos, uma LinkedList, você não tem que alterar qualquer código diferente de onde você cria o objeto para começar (eu.e, a chamada "new ArrayList())".

Se tudo o que está a fazer é iterar através de lista, você pode definir um método que retorna a lista como IEnumerable (para .NET).

Retornando a interface que fornece a funcionalidade que você precisa, se algum novo tipo de coleção vem junto no futuro que é melhor/mais rápido/uma melhor correspondência para a sua aplicação, desde que ainda implementa IEnumerable completamente você pode reescrever o método, usando o novo tipo no seu interior, sem alterar o código que o chamou.

Existe algum motivo para a coleta precisa ser encomendado?Por que não simplesmente retornar um IEnumerable<Employee>?Isto dá o mínimo que é necessário - se, posteriormente, você queria alguma outra forma de armazenamento, como um Saco ou Conjunto de Árvores ou outros enfeites, o seu contrato permaneceria intacta.

Eu não concordo com a premissa de que é melhor retorno de uma interface.A minha razão é que você quer maximizar a utilidade de um determinado bloco de código expõe.

Com isso em mente, uma interface de obras para a aceitação de um item como um argumento.Se um parâmetro de função chamadas para uma matriz ou um ArrayList, que é a única coisa que você pode passar para ele.Se um parâmetro de função chamadas para um IEnumerable ele vai aceitar, bem como uma série de outros objetos.É mais útil

O valor de retorno, no entanto, trabalha em frente.Quando você voltar um IEnumerable, a única coisa que você pode fazer é enumerá-lo.Se você tiver uma Lista acessível e o retorno que, em seguida, o código que chama a função também pode facilmente fazer uma série de outras coisas, como obter uma contagem.

Eu estou unido com aqueles que o aconselha a ficar longe do ArrayList, embora.Os genéricos são muito melhor.

Uma interface é um contrato entre a aplicação e o usuário da aplicação.

Usando uma interface, você permite que a aplicação altere o quanto ele quer, enquanto mantém o contrato para os usuários.

Ele também permite que várias implementações para usar a mesma interface para que os usuários podem reutilizar o código que interage com a interface.

Vocês não dizem que o idioma que você está falando, mas em algo .NETish, então não é de mais trabalho para retornar uma IList de uma Lista ou até mesmo um ArrayList, que a simples menção de que obsoleto classe me faz pensar que você não está falando .LÍQUIDA.

Uma interface é essencialmente um contrato que uma classe tem certos métodos ou atributos;programação para uma interface em vez de uma implementação directa permite mais dinâmico e gerenciável de código, como você pode trocar as implementações enquanto o "contrato" é ainda realizada.

No caso que você descreve, a passagem de uma interface não dar-lhe uma vantagem em particular, se fosse comigo, eu iria passar o ArrayList com o tipo genérico, ou passar a Matriz em si:a lista.toArray()

Na verdade, você não deve retornar uma Lista se isso é um framework, pelo menos não sem pensar nele, recomenda-se uma classe é uma Coleção.A Lista de classe tem algumas melhorias de desempenho ao custo de servidor extendability problemas.Na verdade, é um FXCop regra.

Você tem o raciocínio, para que no este artigo

Tipo de retorno para o método deve ser IList<Employee>.

O que significa que o chamador do método pode usar qualquer coisa que IList oferece, mas não pode usar coisas específicas ArrayList.Então se você sente que, em algum momento LinkedList ou YourCustomSuperDuperList oferece um melhor desempenho ou outras vantagens que você pode usar em segurança dentro de seu método e não de parafuso chamadores dele.

Que está a cerca de interfaces 101.;-)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top