Overload dei metodi in JScript
Due o più membri JScript (funzioni o proprietà) in una classe aventi lo stesso nome e firme diverse vengono denominati funzioni in overload (proprietà). La "firma" di una funzione dipende dal numero, dal tipo e dall'ordine di parametri accettati. Due funzioni presentano la stessa firma se accettano lo stesso numero di argomenti, con lo stesso tipo e nello stesso ordine. Le funzioni che accettano gli stessi tipi di argomenti in un altro ordine, oppure che presentano numeri differenti di argomenti o argomenti di diverso tipo, sono caratterizzate da firme diverse. Si noti che i nomi degli argomenti non hanno alcun effetto sulla firma. Anche le funzioni statiche possono partecipare al processo di overload, tuttavia come per i tipi restituiti, lo stato statico di un metodo non influisce sulla relativa firma. Pertanto, un metodo statico avente lo stesso nome di un metodo di istanza deve includere un elenco di parametri diverso.
Logica di elaborazione
Quando si chiama una funzione in overload, viene chiamata quella i cui argomenti corrispondono maggiormente agli argomenti passati, in base ai tipi effettivi di argomenti passati alla funzione. Se i tipi di argomenti corrispondono esattamente a un particolare overload, viene chiamato tale overload. Se, invece, i tipi di argomenti non corrispondono esattamente ad alcun overload, viene eseguito un processo di eliminazione che determina l'overload da chiamare. Il processo di eliminazione si basa sul livello di facilità con cui è possibile convertire tipi effettivi in tipi negli overload disponibili. Per ulteriori informazioni vedere Coercizione in JScript. Nel'esempio seguente, class MethodOverload presenta tre metodi di overload denominati Greetings. Il primo overload non accetta parametri, il secondo overload accetta un parametro di tipo String e il terzo overload accetta due parametri: uno di tipo String e un altro di tipo int.
var methodOverload = new MethodOverload();
methodOverload.Greetings();
methodOverload.Greetings("Mr. Brown");
methodOverload.Greetings(97, "Mr. Brown");
class MethodOverload
{
function Greetings()
{
print("Hello, and welcome!");
}
function Greetings(name : String)
{
print("Hello, " + name + "!");
}
function Greetings(ticket : int, name : String)
{
print("Hello, " + name + "! Your ticket number is " + ticket + ".");
}
}
L'output del programma è il seguente:
Hello, and welcome!
Hello, Mr.Brown!
Hello, Mr.Brown! Your ticket number is 97.