Fórum Inherited (heradar) uma função de uma classe. #271668
09/03/2005
0
Estou tentando herdar um método que retorna Boolean. (Função).
Mas quando herdo ele não consegue pegar o Inherited. Dá tipo Incompatível.
O que pode ser?
Obrigado.
Yalle Cunha.
Yallebr
Curtir tópico
+ 0Posts
09/03/2005
Beppe
Gostei + 0
09/03/2005
Yallebr
Classe Filho
O problema já começa o seguinte. Ele não coloca o Inherited automático. Caso não seja possível, eu posso achamar o método SALVA do pai no filho mas ai se eu colocar Salvar ele acha que é do filho e fica no Loop eterno.
Ex.
TFilho. function Salva: Boolean;
begin
Result := Salvar; //Loop eterno.
end;
Gostei + 0
09/03/2005
Massuda
TFilho. function Salva: Boolean; begin Result := inherited Salvar; end;
Gostei + 0
09/03/2005
Yallebr
Isso funcionou. Obrigado.
Porque eu precisei passar explicitamente que queria puxar do pai?
Caso fosse uma procedure eu poderia colar apenas
Inherited. Pois na declaração eu coloquei override;
No caso da função que adoto essa forma? Por que?
Muito obrigado.
Yalle Cunha.
Gostei + 0
09/03/2005
Beppe
Gostei + 0
09/03/2005
Yallebr
Obrigado pela ajuda.
Minha dúvida não seria bem essa, seria o seguinte.
Normalmente eu utilizo assim.
TFilho. function Salva: Boolean; begin AlgumCodigo; inherited; //Isso chama o método Salva do pai. end;
Nesse caso tive que fazer isso de forma Explicida.
TFilho. function Salva: Boolean; begin Result := inherited Salvar; //inherited mais o nome do metodo. end;
Ficou claro ?
Yalle
Gostei + 0
09/03/2005
Beppe
Então, no método Salva, estes dois comandos são diferentes:
[b:8dea0aff55]inherited[/b:8dea0aff55] [i:8dea0aff55][/i:8dea0aff55];
[b:8dea0aff55]inherited[/b:8dea0aff55] Salvar;
Gostei + 0
09/03/2005
Yallebr
Obrigado.
:D
Gostei + 0
09/03/2005
Massuda
Desculpe... :oops: talvez meu ´explicitamente´ tenha sido forte demais.
Eu acostumei (por motivos não relacionados ao Delphi) escrever sempre inherited + nome do método quando quero usar o método da classe pai em uma classe filho.
Normalmente, quando você escreve apenas inherited, como em...
TFilho. function Salva: Boolean; begin AlgumCodigo; Result := inherited; end;
Em algumas situações é preciso usar inherited + nome do método... Por exemplo, pode ser que o método em questão precise receber parâmetros e você quer passar parâmetros para o método da classe pai que são diferentes dos parametros que o método da classe filho recebeu. Assim, isso é perfeitamente válido:
TFilho. function Salva(A: TXyz): Boolean; var B: TXyz; begin AlgumCodigo; // Result := inherited; -> isso chama Salva(A) do pai. Result := inherited Salva(B); end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)