Cómo se sobrecargan métodos en JScript
Cuando dos o más miembros (funciones o propiedades) de JScript de una clase tienen el mismo nombre pero firmas diferentes, se denominan funciones (propiedades) "sobrecargadas" La "firma" de una función se basa en el número, el tipo y el orden de los parámetros que acepta. Dos funciones tienen la misma firma si aceptan el mismo número de argumentos, con el mismo tipo, en el mismo orden. Las funciones que aceptan los mismos tipos de argumentos en un orden diferente, o las funciones que tienen un número diferente de argumentos o argumentos de tipos diferentes tienen distintas firmas. (Observe que los nombres de los argumentos no tienen ningún efecto sobre la firma.) Las funciones estáticas también pueden participar en la sobrecarga, pero como ocurre con los tipos devueltos, el estado estático de un método no afecta a su firma. Por tanto, un método estático con el mismo nombre que un método de instancia debe tener una lista de parámetros diferente.
Procesar la lógica
Cuando se llama a una función sobrecargada, se llama a la función sobrecargada cuyos argumentos coinciden estrechamente con los argumentos pasados, dependiendo de los tipos reales de argumentos que se pasaron a la función. Si los tipos de argumento coinciden exactamente con una sobrecarga concreta, a continuación se llama a esa sobrecarga. Si los tipos de argumento no coinciden exactamente con ninguna sobrecarga, un proceso de eliminación determina a qué sobrecarga se llama. El proceso de eliminación se basa en la facilidad con la que los tipos reales pueden convertirse en los tipos de las sobrecargas disponibles. Para obtener más información, vea Conversión en JScript. En este ejemplo, la clase MethodOverload tiene tres métodos sobrecargados denominados Greetings. La primera sobrecarga no toma ningún parámetro, la segunda sobrecarga toma un parámetro de un tipo String y la tercera sobrecarga toma dos parámetros: un tipo String y un 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 + ".");
}
}
El resultado de este programa es:
Hello, and welcome!
Hello, Mr.Brown!
Hello, Mr.Brown! Your ticket number is 97.