• Artigos
  • Build 2016
  • Busca no site
  • Cart
  • Checkout
  • Conio Soluções em Tecnologia
  • Contact Us
  • Cookie Policy (BR)
  • Currículum
  • Fotos
  • Home
  • Home
  • Índice de séries
  • Insights sobre Azure
  • Livro: ASP.NET MVC
  • Microsoft Virtual Academy
  • Most Valuable Professional
  • My Account
  • Page Fullwidth
  • Page Left Sidebar
  • Page Right Sidebar
  • Page With Featured Image
  • Papo Tech
  • Série – Arda
  • Série – Kubernetes
  • Shop
  • Sobre
    • Certificações
    • Prêmios e Títulos
    • Publicações
    • Resumo
    • Projetos de Pesquisa
    • Atuação Profissional
    • Formação Complementar
    • Formação Acadêmica
  • Todos os posts
  • Typography
  • Virtual Developer Day
  • Web Dev Camp 2012
  • Web Dev Camps 2012
  • Séries
    • ASP.NET 5 (vNext)
    • Série – Diário de uma pequena empresa
    • Série – LESS CSS
    • Série – PDS
    • Série – Windows Azure
    • Série – ASP.NET MVC
    • Série – WebMatrix e Razor
    • Série – Orientação a Objetos
    • Série – HTML 5
    • Série – Arquitetura
    • Série – jQuery
  • Alunos
  • Publicações
  • Vídeos
  • Orientações
  • Congressos
  • Contato
Fabrício Sanchez
  • Sobre
    • Resumo
    • Prêmios e Títulos
    • Certificações
    • Publicações
    • Projetos de Pesquisa
    • Atuação Profissional
    • Complementar
    • Formação Acadêmica
  • Artigos
  • Cloud Casters
  • Contato
  • Séries
    • Série – Kubernetes
    • Série – Arda
    • Série – Insights sobre Azure
    • Série – ASP.NET Core
    • Série – ASP.NET MVC
    • Série – Arquitetura
    • Série – Windows Azure
    • Série – Diário de uma pequena empresa
    • Série – LESS CSS
    • Série – PDS
    • Série – WebMatrix e Razor
    • Série – Orientação a Objetos
    • Série – HTML 5
    • Série – jQuery
  • Facebook

  • Twitter

  • Instagram

  • LinkedIn

  • RSS

.NET Framework

Trabalhando com Params Arrays no C#

Trabalhando com Params Arrays no C#
Fabrício Sanchez
13/07/2010

Olá pessoal, sejam bem vindos a mais um artigo em fabriciosanchez.com.br//.

Este artigo tem como objetivo apresentar a passagem de arrays (também conhecidos como vetores) como parâmtros a métodos com exemplos práticos que mostrem sua real utilidade no contexto de desenvolvimento de aplicações.

Os arrays de parâmetros tem a funcionalidade de passar vários valores para um método de uma única vez e com a possibilidade destes parâmetros serem de tipos diferentes. Neste ponto você deve estar se perguntando: Ué, mas a sobreposição de métodos proporcionada pela orientação a objetos não possui a mesma funcionalidade?

O foco deste artigo não é cobrir a sobrecarga de métodos e operadores (este é um bom tema para outro artigo não acham?), entrentanto, o que podemos dizer em relação a sobrecarga de métodos é que ela não apresenta satisfatoriedade a todos os casos, sendo utilazada com eficiência para casos onde operações diferentes necessitam ser executadas baseadas em seus diferentes tipos de parâmetros. O problema desta abordagem surge quando não se sabe o número de parâmetros e os tipos de parâmetros que estarão chegando a determinado método. Neste caso, quantas implementações do mesmo método devem existir se o número de parâmetros é variável e indefinido?

Neste contexto é que os arrays de parêmetros são extremamente úteis. A seguir entenderemos como podemos trabalhar com este poderoso recurso na linguagem C#.

Entendendo as Limitações de um Array Tradicional como Parâmetro

Para entendermos o funcionamento dos arrays de parâmetros, imaginemos a seguinte situação: Quer-se determinar o menor valor em um intervalo de números inteiros de forma automática. Poderíamos então ter uma classe Uteis e um método encontraMenor para encontrar o menor número no intervalo, como apresenta a Listagem 1:

class Uteis
{
   public static int encontraMenor(int[] valores)
      {
            if(valores.Length == 0)
               {
                   throw new ArgumentException("Erro: Nenhum argumento passado!");
               }
             int corrente = valores[0];
             foreach(int v in valores)
               {
                     if(v < corrente)
                        {
                            corrente = v;
                        }
               }
             return corrente;
      }
}

Listagem 1: Sugestão de implementação da classe Uteis e o método encontraMenor.

Para utilizarmos o método encontraMenor bastaria reproduzir o procedimento descrito na Listagem 2, por exemplo:

//código anterior
//
//
int[] testeVlrs = new int[10];
testeVlrs = {1, 2, 54, 84, 31, 45, 0, 4, 3, 19};
int minimoEncontrado = Uteis.encontraMenor(testeVlrs);
//
//
//código posterior

Listagem 2: Exemplo de utilização do método encontraMenor

O código da Listagem 2 é extremamente fácil de se entender. Criamos um array de inteiros chamado testeVlrs de dimensão 10, preenchemos este array com valores inteiros aleatórios e, em seguida, passamos este array como parâmetro para o método encontraMenor da classe Uteis. Sem segredo. O problema desta abordagem é que, para que o método funcione corretamente você precisa preencher o vetor antes de passá-lo como parâmetro, ou seja, tem-se um ciclo adicional de processamento. Para não esbarrarmos nesta limitação podemos utilizar os Params.

Declarando e Utilizando um Array Params

Para trabalharmos com array params utilizamos a palavra reservada params como um modificador do array. A Listagem 3 apresenta o mesmo método encontraMenor utilizando agora o modificador params:

class Uteis
{
   public static int encontraMenor(params int[] valores)
      {
            if(valores.Length == 0)
               {
                   throw new ArgumentException("Erro: Nenhum argumento passado!");
               }
             int corrente = valores[0];
             foreach(int v in valores)
               {
                     if(v < corrente)
                        {
                            corrente = v;
                        }
               }
             return corrente;
      }
}

Listagem 3: Método encontraMenor com params array

Para utilizar o método bastaria fazer uma chamada direta, conforme apresenta a Listagem 4:

int minimoEncontrado = Uteis.encontraMenor(1, 2, 54, 84, 31, 45, 0, 4, 3, 19);

Listagem 4: Passando valores via params array

Ao olharmos a chamada do método encontraMenor, fica claro que, o array é preenchido em tempo de execução, portanto, bem mais produtivo e funcional, além de possibilitar a funcionalidade de encontrar o menor para qualquer número de elementos no array.

Algumas observações que devem ser levadas em conta quando pretende-se trabalhar com params:

  • Não é possível utilizar a palavra chave params para arrays multidimensionais;
  • Não é possível sobrecarregar um método apenas sobre a presença de params, pois, este não faz parte da assinatura do método;
  • Não é possível utilizar os modificadores ref ou out para arrays com params;
  • Um array params deve ser o último parâmtero;
  • Um método não params tem prioridade sobre um método params, portanto, sobrecargas podem ser criadas conforme a necessidade;

Bom pessoal, é isso. Espero que este pequeno e direto artigo possa ter sido útil. Por favor, deixem seus comentários para que eu possa saber onde melhorar os textos. Abraço a todos 🙂 .

Related Items
Comentários (1)

1 Comment

Deixe seu comentário

Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

.NET Framework
13/07/2010
Fabrício Sanchez @https://twitter.com/SanchezFabricio

Principal Architect Lead, Education at Google. Ben's dad and Angie's husband. Passionated about tech, pop culture and tennis.

Related Items

Mais em .NET Framework

Terceirizando o envio de emails do Arda com Azure Functions

Fabrício Sanchez23/07/2017
Ver mais

Arda – Motivação, Arquitetura e Tecnologias

Fabrício Sanchez09/06/2016
Ver mais

Gravação de conteúdo para o Channel 9 Brasil

Fabrício Sanchez22/01/2015
Ver mais

Reaprendendo a programar com ASP.NET: Um primeiro exemplo prático

Fabrício Sanchez12/08/2014
Ver mais

Reaprendendo a programar com ASP.NET: Welcome Katana

Fabrício Sanchez25/05/2014
Ver mais

Semana Computacional da Funec – Saiba como foi

Fabrício Sanchez25/05/2014
Ver mais
Fabrício Sanchez

Este site compartilha informações técnicas da área de tecnologia da informação, com foco no desenvolvimento de aplicações e cloud computing.

Feedbacks, críticas e/ou sugestões são muito bem vindas.

ÚLTIMAS POSTAGENS

  • Distribuindo containers com Docker Swarm – Parte 2
    Azure20/05/2018
  • Distribuindo containers com Docker Swarm – Parte 1
    Azure06/05/2018
  • Um novo desafio pessoal e profissional à frente
    Carreira01/03/2018
  • Event Grid como agente de transformação de aplicações de nuvem
    Architecture06/02/2018
  • Construindo um servidor de Minecraft com Docker e Service Fabric no Azure
    Azure27/11/2017

TAGS

azure Destaque Microsoft ASP.NET cloud computing WebMatrix windows azure nuvem cloud importante web ASP.NET MVC C# computação em nuvem evento destaques mvp Razor .NET JQuery Webstandards web dev camp IIS Desenvolvimento PHP docker Design Travel Fashion Rede Host

Copyright © 2010 Fabrício Sanchez. Todos os direitos reservados.

Entendendo Interfaces com C#
Construindo um painel de Tweets com ASP.NET e C#
Este site utiliza cookies
Para fornecer uma melhor experiência, utilizamos tecnologias baseadas em cookies para armazenar e/ou acessar informações do dispositivo. O consentimento para essa tecnologia nos permitirá processar dados como comportamento de navegação ou IDs exclusivos neste site. Não consentir ou retirar o consentimento pode afetar negativamente certos recursos e funcionalidades.
Funcionais Sempre ativo
O armazenamento ou acesso técnico é estritamente necessário para a finalidade legítima de permitir a utilização de um serviço específico explicitamente solicitado pelo assinante ou utilizador, ou com a finalidade exclusiva de efetuar a transmissão de uma comunicação através de uma rede de comunicações eletrônicas.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Estatísticos
O armazenamento ou acesso técnico que é usado exclusivamente para fins estatísticos. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
O armazenamento ou acesso técnico é necessário para criar perfis de usuário para enviar publicidade ou rastrear o usuário em um site ou em vários sites para fins de marketing semelhantes.
Gerenciar opções Gerenciar serviços Gerenciar fornecedores Leia mais sobre esses propósitos
Preferências
{title} {title} {title}