Yahoo Answers is shutting down on May 4th, 2021 (Eastern Time) and beginning April 20th, 2021 (Eastern Time) the Yahoo Answers website will be in read-only mode. There will be no changes to other Yahoo properties or services, or your Yahoo account. You can find more information about the Yahoo Answers shutdown and how to download your data on this help page.

Boa noite, qual a diferença entre usar params e um array normal como parâmetros em um método? dúvida de programação, linguagem C#?

Olá

Eu tenho quase certeza que é algo simples, mas mesmo assim está me custando entender. Vou explicar a minha dúvida melhor com exemplos. 

Imagina que você quer criar um método que soma vários números de maneira infinita.

Como você não saber a quantidade de argumentos, você usa o params correto?

void Soma(params int[] numeros){

int resultado = 0;

for(int i=0;i<numeros.Lenght;i++){

resultado += numeros[i];

}

}

Mas qual seria a diferença se eu usasse um array normal neste caso? Por que no caso abaixo, usando array daria na mesma não é? Ou estou errado?

void Soma(int[] numeros){

int resultado = 0;

for(int i=0;i<numeros.Lenght;i++){

resultado += numeros[i];

}

}

Espero que você que vai responder entenda a minha dúvida, não sei se expliquei corretamente, mas tem algo óbvio que eu não estou conseguindo perceber.

Obrigado quem me ajudar!

1 Answer

Rating
  • ?
    Lv 6
    2 months ago

    Essa é uma daquelas situações que querer saber o "quando usar" se torna uma tarefa particular do seu negócio. Quando usar params? Não faço ideia, tudo vai depender se faz sentido para o seu método.

    O que a gente precisa entender é que quando a gente escreve uma classe pública ou uma interface, estamos estabelecendo um contrato. Um contrato que diz que um outro programador poderá consumir essa classe sem se preocupar com detalhes de implementação.

    A chamada de um método hipotético "AdicionaProdutoNoPedido", que em contexto de exemplo adiciona um ou mais produtos em um pedido, usando params ficaria assim:

    AdicionaProdutoNoPedido(pedido, produto1, produto2, produto3);

    Enquando sem usar params você estaria restrito à algo assim:

    AdicionaProdutoNoPedido(pedido, new Produto[] { produto1, produto2, produto3 });

    A implementação dos métodos em ambos os casos podem ser (quase) a mesma coisa? Sim, mas perceba que quem vai consumir a classe não está preocupado com implementação, está preocupado com o USO, no primeiro exemplo está mais fácil de ler e consumir o método.

Still have questions? Get your answers by asking now.