DUVIDAS MUITO SIMPLES SOBRE SOBRECARGA NA CLASSE

MARCOS 20/07/2010 16:28:00
#347959
Boa tarde,Pessoal!
Acostumado com programação estruturada,as veses
me deparo com dúvidas simples sobre OO.

1.) Eu já sei o que é ,e sei criar métodos sobrecarregados numa classe.Mas...
não entendi, em que situação realmente prática, é conveniente usar dois
métodos com mesmo nome numa classe.Alguém poderia dar um exemplo?

2.) Ao criar um método, numa classe. Temos aquele termo ByVal.O que
significa este termo. é opcional ou obrigatório???
TECLA 20/07/2010 16:53:05
#347964
Resposta escolhida
Citação:

1.) Eu já sei o que é ,e sei criar métodos sobrecarregados numa classe.Mas...
não entendi, em que situação realmente prática, é conveniente usar dois
métodos com mesmo nome numa classe.Alguém poderia dar um exemplo?



Um exemplo prático:
Sua CLASSE tem um MéTODO que devolve os dados do CLIENTE com base no parâmetro enviado.
Public Function PesquisaCliente (ByVal codigoCliente As Integer) As DataTable
...
End Function


Se por algum motivo, você precisar que a classe pesquise por NOME, usando o mesmo modelo de objeto, vamos sobrecarregar o método PESQUISACLIENTE onde o parâmetro de entrada receberá uma STRING.

Public Function PesquisaCliente (ByVal nomeCliente As String) As DataTable
...
End Function


Citação:

2.) Ao criar um método, numa classe. Temos aquele termo ByVal.O que
significa este termo. é opcional ou obrigatório???



ByVal = Por valor
ByRef = Por referência

Se não me engano, na ausência da palavra-chave ByVal, o próprio Visual Studio se encarrega de escrevê-lo.
Sugiro que dê uma pesquisada no Google sobre [txt-color=#0000f0]passagem de parâmetros por valor e por referência[/txt-color].
ANDRE.ADMVB 20/07/2010 16:55:11
#347965
MARCOS,

A sobrecarga é sim muito útil.
Eu mesmo utilizo várias em meus projetos.

Posso te explicar da seguinte forma:
Lembra no VB, quando você podia deixar de passar parâmetros OPCIONAIS?

Suponhamos que você faça um método EnviarEmail no qual você apenas passa o email do destinatário, e o sistema faz o resto.
Pode ser útil nessa situação, mas não genérico.

Para isso, você faria outro método EnviarEmail, sobrecarregando o mesmo, com outros parâmetros, por exemplo: além de passar o email do destinatário, você teria também o email do Com Cópia.

E assim vai.
Você vai criando sobrecargas de acordo com sua necessidade, mas o ideal é deixar que apenas um método faça todo o trabalho, enquanto os outros [Ô]passam a bola[Ô] para o mais completo, por exemplo:

No form, chamaria assim:
EnviarEmail([Ô]destinatario@provedor.com.br[Ô])


No método EnviarEmail que só recebe um parâmetro, faria isso:
Public Shared Sub EnviarEmail(ByVal pDestinatario As String)
EnviarEmail(pDestinatario, String.Empty)
End Sub


No método EnviarEmail que recebe dois parâmetros, faria isso:
Public Shared Sub EnviarEmail(ByVal pDestinatario As String, ByVal pComCopia As String)
If Not String.IsNullOrEmpty(pComCopia) Then
[ô]Adicionar cópia no email
End If

[ô]Continuar montando email


Espero que tenha dado para entender.


Sobre passar ByVal ou ByRef, se não me engano não é obrigatório, mas por default, será ByVal caso você não informe nada.

A diferença é que, passando uma variável ByVal, você pode fazer o que quiser com ela dentro do método, que quando sair dele, a variável continuará com o mesmo valor (é como se dentro do método o sistema aponte um outro espaço da memória para usar esse valor).

Passando uma variável ByRef, toda alteração que você pode vir a fazer nela dentro de um método, será mantida assim que você sair do mesmo (ou seja, o sistema está alterando o valor na mesma referência de memória que estava sua variável antes).

Ok?
JONATHANSTECKER 28/04/2011 15:13:49
#372709
Problema RESOLVIDO? Caso sim, favor ENCERRAR o tópico.
Caso ainda esteja com dificuldades, dê um UPDATE.

Regras de uso do Fórum.

  • [txt-color=#e80000]Encerre seus tópicos[/txt-color]

    Quando você acha uma solução prática e efetiva que outro usuário lhe enviou no Fórum, por favor encerre seu tópico. Tópico encerrado é sinal de pergunta respondida, assim quem precisa cadastrar um novo tópico pode primeiro olhar as ocorrências de tópicos encerrados para ver se a resposta já não foi dada e somente haverá uma pergunta repetida.
    Tópico encerrado , respostas não são mais permitidas