Newsgroup: it.comp.lang.delphi
Titolo: Overloading

Buongiorno a tutto il NG!
Vorrei, se possibile, che mi deste un piccolo suggerimento riguardo 
all'overloading...
Mi sono letto un po' di help e ho capito che volessi fare overloading di una 
funzione/procedura in un pezzo generico di programma, mi basterebbe 
dichiarare le routine (simili tra di loro, il numero di parametri che si 
passano deve essere uguale) con la direttiva OVERLOAD. Da quel punto in poi, 
nel programma è come se fosse visibile (la visibilità dipende chiaramente da 
dove ho fatto la dichiarazione delle routine) una sola funzione/procedura i 
cui parametri "si adattano" ai valori che io passo nella chiamata.
Purtroppo per quanto riguarda "metodi e componenti" le cose sono un po' più 
complesse.
L'help, in questo caso, è molto conciso e non ho capito bene come procedere.
Supponiamo di avere un componente che mantiene una lista di stringhe e 
supponiamo che tale componente abbia un metodo che, dato un numero, 
restituisce 'Hai scelto la riga: ' + la stringa corrispondente al numero se 
quel numero è valido.
type
  TMyComp = class(TComponent)
    FLines: TStrings;
    procedure SetLines (aValue: TStrings);
  published
    function GetLine (const aIndex: Integer): String;
    property Lines: TStrings read FLines write SetLines stored False;
  end;
[...]
function TMyComp.GetLine (const aIndex: Integer): String;
begin
  if (aIndex >= 0) and (aIndex < FLines.Count) then
    Result := 'Hai scelto la riga: ' + FLines[aIndex]
  else
    Result := ''
end;
Supponiamo ora di voler scrivere un metodo che fa sostanzialmente la stessa 
cosa ma che in ingresso accetta una stringa:
function TMyComp.GetLine (const aString: String): String;
begin
  if FLines.IndexOf (aString) <> -1 then
    Result := 'Hai scelto la riga: ' + aString
  else
    Result := ''
end;
L'help dice che non posso dichiarare i due metodi nello stesso componente, 
ma che devo fare così:
type
  TMyComp = class(TComponent)
    FLines: TStrings;
    procedure SetLines (aValue: TStrings);
  published
    function GetLine (const aIndex: Integer): String; overload; virtual;
    property Lines: TStrings read FLines write SetLines stored False;
  end;
  TMyComp2 = class(TComponent)
  published
    function GetLine (const aString: String): String; reintroduce; overload;
  end;
e che in questo modo quando vado a chiamare la GetLine, automaticamente 
utilizzerà il metodo che si adatta al tipo di parametri passati... Ma mi 
sorgono i dubbi:
* Con che nome verrà visualizzato il mio componente TMyComp1 o TMyComp2?
* RegisterComponents deve registrare solo TMyComp1 o solo TMyComp2? O 
entrambi?
Scusate il post come al solito lungo, e grazie per le eventuali risposte!
Stefano 



Che stupido!
Ho fatto un po' di prove e mi sono risposto da solo!
Scusate,
   Stefano 

entrambi?
Tutti quelli che vuoi vedere nella palette.
Luigi D. Sandon - D&amp;D Support Team
--- posted by geoForum on 
http://www.delphiedintorni.it

Buongiorno a tutto il NG!
Vorrei, se possibile, che mi deste un piccolo suggerimento riguardo 
all'overloading...
Mi sono letto un po' di help e ho capito che volessi fare overloading di una 
funzione/procedura in un pezzo generico di programma, mi basterebbe 
dichiarare le routine (simili tra di loro, il numero di parametri che si 


[...]



L'help dice che non posso dichiarare i due metodi nello stesso componente, 
ma che devo fare così:
type
  TMyComp = class(TComponent)
    FLines: TStrings;
    procedure SetLines (aValue: TStrings);
  published
    function GetLine (const aIndex: Integer): String; overload; virtual;
    property Lines: TStrings read FLines write SetLines stored False;
  end;
  TMyComp2 = class(TComponent)
  published
    function GetLine (const aString: String): String; reintroduce; overload;
  end;
e che in questo modo quando vado a chiamare la GetLine, automaticamente 
utilizzerà il metodo che si adatta al tipo di parametri passati... Ma mi 
sorgono i dubbi:
* Con che nome verrà visualizzato il mio componente TMyComp1 o TMyComp2?
* RegisterComponents deve registrare solo TMyComp1 o solo TMyComp2? O 
entrambi?
Scusate il post come al solito lungo, e grazie per le eventuali risposte!
Stefano 

