 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
informacaoweed Aprendiz


Registrado: Terça-Feira, 1 de Outubro de 2013 Mensagens: 268 Localização: Porto Alegre / RS
|
Enviada: Sex Jul 18, 2014 4:16 pm Assunto: Problema com Poliformismo [RESOLVIDO] |
|
|
É o seguinte,
Considere a classe TPai, uma classe que serve como modelo para ser herdado tenho 2 assinaturas para a função carregar:
| Código: | function Carregar(_ID : Integer): Boolean; overload; virtual;
function Carregar: Boolean; overload; virtual; abstract; |
Note que a versão sem nenhum parâmetro da function Carregar tem a diretiva abstract; Isso significa que ela não tem implementação neste objeto, apenas a assinatura. Apenas seus filhos terão código escrito nesta função. Já a versão com a assinatura tem sim, uma implementação aqui. Segue:
| Código: | function TPadraoM.Carregar(_ID: Integer): Boolean;
begin
Result := False;
Limpa;
if _ID > 0
then ID := _ID;
Result := Carregar; //*Obs
end; |
*Obs: A função Carregar que está sendo chamada acima, deve ir (e vai) para a função Carregar que está escrita dentro de seu herdeiros.
Agora considere TFilho, herdeiro de TPai. Ele tem apenas a assinatura da versão sem parâmetros do método Carregar:
| Código: | | function Carregar: Boolean; override; |
A seguir, o código onde faço a chamada para o método carregar:
| Código: | with CtrlModelo.ClientesM do
begin
Carregar(Id);
//comandos...
end; |
O código acima pertence a um TFrame. quando o sistema chega na linha Carregar(Id), no código acima, a variável Id está setada com o código do cliente, por exemplo = 1. Ok.
Mas aí entra na função Carregar, escrita dentro de TPai, o primeiro código que postei lá em cima, mas o parâmetro _ID está = 0.
Alguém já passou por problema semelhante ou não, mas tem alguma idéia do que esstá ocorrendo?
Editado pela última vez por informacaoweed em Ter Jul 22, 2014 12:22 pm, num total de 4 vezes |
|
| Voltar ao Topo |
|
 |
informacaoweed Aprendiz


Registrado: Terça-Feira, 1 de Outubro de 2013 Mensagens: 268 Localização: Porto Alegre / RS
|
Enviada: Ter Jul 22, 2014 11:33 am Assunto: UP |
|
|
UP UP UP
Help aí galera |
|
| Voltar ao Topo |
|
 |
GustavoToyota Profissional


Registrado: Domingo, 9 de Outubro de 2011 Mensagens: 605 Localização: Sorocaba - SP
|
Enviada: Ter Jul 22, 2014 11:47 am Assunto: |
|
|
Não entendi. Explique melhor.
Editado pela última vez por GustavoToyota em Ter Jul 22, 2014 11:51 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
claudio.ferreira Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013 Mensagens: 667
|
Enviada: Ter Jul 22, 2014 11:50 am Assunto: |
|
|
O problema não está no modelo construido de polimorfismo, mas na própria aplicação que está passando o argumento zerado. Já tentou debugar e ver o conteudo de ID antes de entrar no método carregar ? _________________ Sistema SNGPC para farmácias
http://www.cmasistemas.com.br
Rastreabilidade de Medicamentos
https://www.sncm.com.br
Soluções em Delphi
https://delphisolutions.wordpress.com/
.
"E não sabendo que era impossível, foi lá e fez"
Mark Twain |
|
| Voltar ao Topo |
|
 |
informacaoweed Aprendiz


Registrado: Terça-Feira, 1 de Outubro de 2013 Mensagens: 268 Localização: Porto Alegre / RS
|
Enviada: Ter Jul 22, 2014 12:14 pm Assunto: |
|
|
aí gurizada, obrigado por se manifestarem.
Rodei a rotina novamente para trazer mais informação a vocês e pra minha surpresa funcionou! Explico:
O parâmetro na verdade não estava escrito _ID, mas Id. O delphi não é case sensitive, por tanto quando estava dentro de um With no qual é setado o objeto que tem ID como uma propriedade, era esta que estava sendo lida ao invés de Id. Eu estou passando um pente-fino no sistema, e acabei modificando o parâmetro Id para _ID, fiz essa modificação quando peguei o código pra postar esse tópico, por isso vocês estão vendo o código já com a modificação que consertou o problema, mas quando eu postei, eu apenas modifiquei para fins de identação, e não testei a rotina, já que eu não havia percebido que consertara o problema. Logo vocês não puderam ver o erro no código que postei pq eu sou uma anta
Obrigado amigos pela atenção e o desprendimento. Podem esperar o mesmo de mim.
Abraço aí! _________________ Aguarde... nossa Evolução está sendo processada. |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|