Dúvida sobre Overload, mesmas assinaturas ???
Olá pessoal. Estou com uma dúvida quanto ao uso da diretiva [b:6b04e8848c]Overload[/b:6b04e8848c], verifiquei vários tópicos passados, mas não obtive êxito. No meu caso é o seguinte. Tenho uma classe [b:6b04e8848c]Pai[/b:6b04e8848c] chamada [b:6b04e8848c]Banco[/b:6b04e8848c], declarada da seguinte forma :
e a classe [b:6b04e8848c]filha[/b:6b04e8848c] chamado de [b:6b04e8848c]BancoFirebird[/b:6b04e8848c] abaixo:
Resumindo. Quando tento compilar, ele me retorna um erro na classe filha como:
Sei que existe um problema quanto à declaração e acredito que isto só possa ser feito utilizando tipos de parâmetros passados dentro do método. Contudo, não sei como poderei fazer para resolver isto. Em java conseguiria, porque a JVM a teria a partir da assinatura do método, mas não estou muito bem lembrado como poderei fazê-lo em delphi. Se alguém puder me dar uma força agradeço!!!
:shock:
Meu chefe já pegou no meu pé, mais ainda não consegui o que faço!
type
TBanco = Class(TObject) { Package declarations }
//¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
private { Private declarations }
//¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
public { Public declarations }
// construtores e destrutores da classe
constructor create; virtual; abstract;
destructor destroy; virtual; abstract;
//¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
end;
var
Banco : TBanco;e a classe [b:6b04e8848c]filha[/b:6b04e8848c] chamado de [b:6b04e8848c]BancoFirebird[/b:6b04e8848c] abaixo:
type
// atributos principais do classe BancoFirebird
TBancoFirebird = Class(TBanco) { Package declarations }
//¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
private { Private declarations }
//¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
public { Public declarations }
// variáveis e membros
setPropertiesFirebird : TPropertiesFirebird;
// construtores e destrutores da classe
constructor create; override;
destructor destroy; override;
// carregando configurações específicas para conexão do banco de dados
function getConnectionParams : TPropertiesFirebird; overload;
function getConnectionParams : TStrings; overload;
function getConnectionProperties : TPropertiesFirebird;
//¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
end;
var
BancoFirebird : TBancoFirebird;
Resumindo. Quando tento compilar, ele me retorna um erro na classe filha como:
Method ´getConnectionParams´ with identical parameters exist already
Declaration of ´getConnectionParams´ differs from previous declaration
Sei que existe um problema quanto à declaração e acredito que isto só possa ser feito utilizando tipos de parâmetros passados dentro do método. Contudo, não sei como poderei fazer para resolver isto. Em java conseguiria, porque a JVM a teria a partir da assinatura do método, mas não estou muito bem lembrado como poderei fazê-lo em delphi. Se alguém puder me dar uma força agradeço!!!
:shock:
Meu chefe já pegou no meu pé, mais ainda não consegui o que faço!
Faelcavalcanti
Curtidas 0
Respostas
Massuda
28/03/2005
[b:9120da3459]overload[/b:9120da3459] é usado para distinguir funções/procedures de mesmo nome mas com lista de parâmetros diferentes. No seu caso, apenas o valor de retorno é diferente e por isso o overload não está funcionando.
GOSTEI 0
Kapak
28/03/2005
Vc também pode declarar assim:
procedure getConnectionParams(var Obj:TPropertiesFirebird); overload; procedure getConnectionParams(var Obj:TStrings); overload;
GOSTEI 0
Kapak
28/03/2005
Vc também pode declarar assim:
procedure getConnectionParams(var Obj:TPropertiesFirebird); overload; procedure getConnectionParams(var Obj:TStrings); overload;
GOSTEI 0
Faelcavalcanti
28/03/2005
[b:e5437938a7]overload[/b:e5437938a7] é usado para distinguir funções/procedures de mesmo nome mas com lista de parâmetros diferentes. No seu caso, apenas o valor de retorno é diferente e por isso o overload não está funcionando.
Pois é amigo, já estava prevendo isto. No meu caso foi uma tentativa de uma migração de código, estou tentando deixar parte de uma função genérica e por este motivo não estou conseguindo.
Mas quanto à :
Vc também pode declarar assim:Código:
procedure getConnectionParams(var Obj:TPropertiesFirebird); overload;
procedure getConnectionParams(var Obj:TStrings); overload;
Até fica legal, mas mesmo assim terei que declarar este tipo de objeto no escopo a ser utilizado, tipow :
procedure xxxx; var v_Objeto : TStrings; begin getConnectionParams(v_Objeto); end;
Não é como eu queria, pois terei que encapsular diversas vezes um mesmo objeto, na verdade é apenas um exemplo como está o meu código. Acho que a idéia no delphi é fazer desta forma mesmo. Mas obrigado!!!
Pensava que no Delphi a sobrecarga de métodos era possível a partir do seu retorno, o que também faz parte da assinatura do método. O que de fato é totalmente possível em Java.
:roll:
Mas valeu. Happing code for us!!!! Thanks!!!!
GOSTEI 0