Fórum Sobrecarga de métodos #9391

17/09/2009

0

Oi!

Gostaria de tirar uma dúvida com vocês sobre sobrecarga de métodos. Muitas vezes na camada de negócio ou na camada de persistência, eu vou trazer determinada coleção de objetos conforme um parâmetro passado. Por exemplo, para veículos, as vezes desejo trazer todos os veículos de um determinado fabricante, ou de uma determinada cor, qtde de passageiros, e assim por diante...

Então, para o primeiro método, eu colocaria o nome de SelecionarVeiculos(int _idfabricante). Logo depois, surgindo a necessidade de também fazer pela cor, eu gostaria de fazer SelecionarVeiculos(int _idcor). Mas isso não é possível pois os parâmetros entre os métodos tem o mesmo tipo.

Mesmo que eu mudasse entre um ou outro inicialmente para tipos como Int16, Int64 e etc, já cheguei em determinados momentos de regra ou de fazer consulta, que precisei passar números e já não tinha mais outra opção (do tipo, passar outro tipo de inteiro além do Int32, Int16, Int64, e etc).

Então eu gostaria de saber como vocês procedem nessa situação, ou o que vocês aconselham? Mudar mesmo o nome do método de um parâmetro para outro ou existe alguma outra forma?

Fico no aguardo, e obrigado pela atenção!
Carlos Nogueira

Carlos Nogueira

Responder

Posts

17/09/2009

Fabio Mans

Olá Carlos você pode receber um objeto ao invés de um inteiro.

Vamos supor que você tenha criado uma classe chamada Veiculo com as seguinte propriedades.


public class Veiculo
{

    public string nomeFabricante { get; set; }
    public int idCor { get; set; }
    public string nomeCor { get; set; }
    public int IdFabricante { get; set; }


   
    public void CadastrarDadosVeiculo(Veiculo veiculo)
    {
        if (veiculo.IdFabricante > 0)
            CadastrarCor();
        else
            CadastrarFabricante();
    }



    private void CadastrarFabricante()
    {
      
    }

    private void CadastrarCor()
    {
       
    }
}

Perceba que o método CadastrarDadosVeiculo recebe um objeto veículo e não um inteiro, em seguida eu verifico se o idFabricante possui valor, senão eu cadastro a cor.


Na página eu chamo da seguinte maneira.


  protected void Page_Load(object sender, EventArgs e)
    {
        Veiculo veiculo = new Veiculo();
        veiculo.idCor = 5;
        veiculo.CadastrarDadosVeiculo(veiculo);
       
    }


Ou




        veiculo.IdFabricante = 1506;
        veiculo.CadastrarDadosVeiculo(veiculo);


Espero ter ajudado


Fabio
Responder

Gostei + 0

17/09/2009

Carlos Nogueira

Oi Fabio!

Ah, bastante interessante. E deixa eu te perguntar, fazendo uso do mesmo exemplo no último post, e se ao invés de gravar, eu desejasse buscar os veículos com base na idcor, idfabricante ou que inicie com o nome, faria o método no mesmo molde do exemplo que você passou?

Em caso positivo, quando que eu poderia estar fazendo uso de sobrecarga de método?

É que eu imaginava que se tratando de alcançar o mesmo objetivo mas com parâmetros diferentes, você faria uso de sobrecarga sabe? Pode ser que eu tenha me enganado. Como eu trabalhei com VB6, eu fazia várias vezes o exemplo que você citou no post anterior, e ai tinha aquela coisa de testar por causa do impacto onde já fazia uso, essas coisas... Mas bem, gostaria de saber sua opinião.

Valeu!
Responder

Gostei + 0

21/09/2009

Fabio Mans

Sim faria no mesmo molde, sobre a sobrecarga é bom exemplo é o Visual Studio.

Digite

StringBuilder db = new StringBuilder()
db.Append()

Veja as várias sobrecargas, perceba que os argumentos são todos diferentes, o que você tinha a intensão de fazer teria realmente que ser com outro nome no método.

Fabio


Oi Fabio!

Ah, bastante interessante. E deixa eu te perguntar, fazendo uso do mesmo exemplo no último post, e se ao invés de gravar, eu desejasse buscar os veículos com base na idcor, idfabricante ou que inicie com o nome, faria o método no mesmo molde do exemplo que você passou?

Em caso positivo, quando que eu poderia estar fazendo uso de sobrecarga de método?

É que eu imaginava que se tratando de alcançar o mesmo objetivo mas com parâmetros diferentes, você faria uso de sobrecarga sabe? Pode ser que eu tenha me enganado. Como eu trabalhei com VB6, eu fazia várias vezes o exemplo que você citou no post anterior, e ai tinha aquela coisa de testar por causa do impacto onde já fazia uso, essas coisas... Mas bem, gostaria de saber sua opinião.

Valeu!
Responder

Gostei + 0

22/09/2009

Carlos Nogueira

Beleza, então neste caso pode finalizar o suporte.

Muito obrigado pela sua atenção!

Atenciosamente,

Carlos
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar