Como saber se um método Abstrado foi implementado no Filho?
Olá pessoal,
Como faço para saber se um método abstrado foi implementado? Ou nem mesmo precisa ser abstrado. Queria fazer assim.
Se o filho implementou tal método então executa o método do filho, senão executa o método padrão do pai.
Ficou claro?
Obrigado. 8)
Como faço para saber se um método abstrado foi implementado? Ou nem mesmo precisa ser abstrado. Queria fazer assim.
Se o filho implementou tal método então executa o método do filho, senão executa o método padrão do pai.
Ficou claro?
Obrigado. 8)
Yallebr
Curtidas 0
Respostas
Massuda
27/04/2005
Se o filho implementou tal método então executa o método do filho, senão executa o método padrão do pai.
Talvez eu não tenha entendido direito, mas acho que seria suficiente declarar o método como sendo virtual apenas e ter a implamentação padrão na classe pai.GOSTEI 0
Marco Salles
27/04/2005
Como faço para saber se um [b:5c4672ec04]método abstrado [/b:5c4672ec04]foi implementado?
Se o filho implementou tal método então executa o método do filho, senão executa o método padrão do pai.
Se o método foi definido com [b:5c4672ec04]abstract [/b:5c4672ec04]na classe pai , ele ao ao ser [b:5c4672ec04]chamado[/b:5c4672ec04] por um objeto que faz [b:5c4672ec04]referencia ao Pai [/b:5c4672ec04], voce obtera um [b:5c4672ec04][color=darkred:5c4672ec04]Erro[/color:5c4672ec04][/b:5c4672ec04]
[b:5c4672ec04]Constructing instance of <nome da classe> containing abstract methods.[/b:5c4672ec04]
Em outras palavras , Aa directiva abstract é usada para declarar métodos que serão definidos apenas em subclasses da classe Pai
:arrow: [b:5c4672ec04]Agora a outra interpretação é :[/b:5c4672ec04]
Para o Filho implementar algum método diferente do método definido pela classe pai , este mesmo método tem que [b:5c4672ec04]ter[/b:5c4672ec04] a directiva [b:5c4672ec04]Virtual ou Dynamic [/b:5c4672ec04]na classe Pai e ter a directiva [b:5c4672ec04]override[/b:5c4672ec04] na classe Filho
[b:5c4672ec04]Mais uma interpretação[/b:5c4672ec04]:Se o filho implementou tal método então sera sempre executado , se o objeto criado [color=darkred:5c4672ec04][b:5c4672ec04]for uma instancia [/b:5c4672ec04][/color:5c4672ec04]da classe[b:5c4672ec04] Filho[/b:5c4672ec04],
se o objeto criado , for uma [color=darkred:5c4672ec04][b:5c4672ec04]instancia da classe pai [/b:5c4672ec04][/color:5c4672ec04]o método chamado , sera o da classe [b:5c4672ec04]Pai[/b:5c4672ec04]
É Claro que a variavel criada tem que ser do tipo da classe pai..
Var Objeto : TPai begin //pelo simples fato de que as duas chamadas a seguir são válidas objeto:=TPai.Create Objeto:=TFilho.Create;
Agora se a Variavel for do Tipo
var objeto:TFilho; begin Objeto:=TPai.Create --->>> isto é um erro
Com regra geral, voce pode usar um objeto da classe descendente , sempre que um objeto da classe ancestral for esperado, entretando o inverso não é válido
Para finaliZar voce pode usar o [b:5c4672ec04]Osperadore <IS> e <As>[/b:5c4672ec04] para obter informaççoes em tempo de execução da referencia do objeto
//definido como sendo Override na claase pai sera Executado if objeto is TPai Then objeto.MetodoPai executado //definido como sendo Overload na classe filho sera executado if Objeto is TFilho Objeto.MetodoFilho
p:s o uso desgorvenado dos operadores RTTI , é considerada uma prática ruim em programação
GOSTEI 0
Yallebr
27/04/2005
Massuda e Marco Salles,
Obrigado. Realmente acho que estou tentando fazer uma coisa simples de maneira complicada.
Declarei um método como virtual. Dessa forma eu do um override para sobre por no filho e faço a implementação da forma de desejar.
Obrigado. Realmente acho que estou tentando fazer uma coisa simples de maneira complicada.
Declarei um método como virtual. Dessa forma eu do um override para sobre por no filho e faço a implementação da forma de desejar.
GOSTEI 0