Alternativa para o overload
04/11/2009
0
tenho a seguinte situação na minha lib
TDateGen = class
public
class function ExtrairAno(aDate:TDateTime):integer;
class function ExtrairMes(aDate:TDateTime):integer;
class function ExtrairDia(aDate:TDateTime):integer;
end;
Fiz isso usando o DecodeDate, mas separei em funções assim para não ter que ficar criando toda vez as variaveis e tudo mais.
Bom vamos ao meu problema.
Gostaria de criar tbm as seguintes funções
class function ExtrairAno(aDate:TDateTime):string;
class function ExtrairMes(aDate:TDateTime):string;
class function ExtrairDia(aDate:TDateTime):string;
Pois tenho caso em que preciso escrever o retorno, e para não ter que ficar fazendo o IntToStr toda hora no código.
como usaria isso.
var
mes :integer;
begin
mes := ExtrairMes(now); //(aqui ele chamaria a função com o result integer, se a variavel fosse string, ele chamaria a função com result string;
Tem como fazer isso?
Quais são as alternativas?
Obrigado
Marcos Iwazaki
Posts
04/11/2009
Anderson Farias
|não ter que ficar criando toda vez as variaveis e tudo mais.
Pq? As funções DayOf(), MonthOf() e YearOf() não já fazem isso? Pq não usá-las?
|Bom vamos ao meu problema.
|Gostaria de criar tbm as seguintes funções
| class function ExtrairAno(aDate:TDateTime):string;
|...
Uma solução simples? Mude o nome das funções! tipo: ExtrairAnoToS(), etc
T+
04/11/2009
Marcos Iwazaki
Não lembrava dessas funções, bom como estão todos separados em funções vou alterar la. Obrigado.
|Uma solução simples? Mude o nome das funções! tipo: ExtrairAnoToS(), etc
Então o que eu quero mesmo era poder usar o mesmo nome, Usar algum tipo de desing Pattern (não sei se existe para este problema).
Mas vou anotar sua sugestão... Mesmo que não consiga fazer exatamente o que eu quero é bom ter sugestões de como chegar no mesmo resultado.
Obrigado.
04/11/2009
Anderson Farias
class procedure ExtrairAno(Data: TDateTime; var Ano: Integer); overload;
class procedure ExtrairAno(Data: TDateTime; var Ano: string); overload;
e dai usar da forma:
var
i: Integer;
s: string;
begin
MinhaClasse.ExtrairAno(Date, i);
MinhaClasse.ExtrairAno(Date, s);
end;
T+
05/11/2009
Marcos Iwazaki
Acho que procedimentos para mim vai ficar pior. Vou criar outras functions mesmo.
Obrigado.
05/11/2009
Marcos Iwazaki
Estou tentando novamente pelo firefox p ver se aparece.
07/11/2009
Jorge Abreu
class function ExtrairAno(aDate:TDateTime):integer; overload; class function ExtrairAno(aDate:TDateTime):string; overload;
07/11/2009
Anderson Farias
|(Sobrecarga) como também o Override (Sobrescrita) de functions.
Sim, o Delphi suporta sobrecarga, mas o pré-requisito para sobrecarga é que os métodos tenham *assinatura* diferente.
No caso de funções, o tipo retornado pela função não faz parte da assinatura do método e assim, mudar apenas o retorno da função e manter a mesma assinatura (parâmetros) não permite a sobrecarga. Por isso q uma solução é converter a função em procedimento fazendo assim q o valor de retorno passe a integrar a assinatura do método.
É assim no D7 e, até onde sei, continua assim até o D2010.
T+
08/11/2009
Jorge Abreu
09/11/2009
Marcos Iwazaki
Vou decidir ainda como vou fazer, mas acho que pelo jeito vou acabar optando pelo modo de criar outro nome p o metodo
ExtrairAnoString
T+
Clique aqui para fazer login e interagir na Comunidade :)