Fórum Problema com Casting no Delphi #287828
12/07/2005
0
Desculpem a pergunta meio leiga, mas ai vai:
Tenho em meu programa, varias classes, todas descendentes de uma mesma superclasse. Todas possuem um metodo chamado Conecta, sendo que a superclasse possui esse metodo, e suas subclasses sobrecarregam esse metodo com suas peculiaridades. Acontece que, em determinado momento, eu preciso chamar este metodo, mas o correspondente de cada classe, de acordo com a classe a qual o objeto pertence. Entao eu estou fazendo assim:
if (objeto is SubClasse1) then SubClasse1(objeto).Conecta
else if (objeto is SubClasse2) then SubClasse2(objeto).Conecta
else if (objeto is SubClasse3) then SubClasse3(objeto).Conecta
Acho essa maneira muito ruim de fazer... Existe uma maneira de eu não utilizar esses ifs, e conseguir dar um cast em ´objeto´ pra chamar o metodo correspondente? Não sei se fui muito claro, mas obrigado mesmo assim!
Ate mais!
Jose Gustavo
Tenho em meu programa, varias classes, todas descendentes de uma mesma superclasse. Todas possuem um metodo chamado Conecta, sendo que a superclasse possui esse metodo, e suas subclasses sobrecarregam esse metodo com suas peculiaridades. Acontece que, em determinado momento, eu preciso chamar este metodo, mas o correspondente de cada classe, de acordo com a classe a qual o objeto pertence. Entao eu estou fazendo assim:
if (objeto is SubClasse1) then SubClasse1(objeto).Conecta
else if (objeto is SubClasse2) then SubClasse2(objeto).Conecta
else if (objeto is SubClasse3) then SubClasse3(objeto).Conecta
Acho essa maneira muito ruim de fazer... Existe uma maneira de eu não utilizar esses ifs, e conseguir dar um cast em ´objeto´ pra chamar o metodo correspondente? Não sei se fui muito claro, mas obrigado mesmo assim!
Ate mais!
Jose Gustavo
Joeygustavo
Curtir tópico
+ 0
Responder
Posts
12/07/2005
Beppe
O método deve ser declarado virtual ou dynamic na superclasse, e com override nas descendentes. Então:
TClassePai(objeto).Conecta;
TClassePai(objeto).Conecta;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)