So werden Methoden in JScript überladen
Aktualisiert: November 2007
Wenn zwei oder mehrere JScript-Member (Funktionen oder Eigenschaften) in einer Klasse über denselben Namen, aber unterschiedliche Signaturen verfügen, werden sie als "überladene" Funktionen (Eigenschaften) bezeichnet. Die "Signatur" einer Funktion basiert auf der Anzahl, dem Typ und der Reihenfolge der Parameter, die sie akzeptiert. Zwei Funktionen verfügen über eine identische Signatur, wenn sie dieselbe Anzahl von Argumenten akzeptieren, die denselben Typ und dieselbe Reihenfolge aufweisen. Funktionen, die dieselben Argumenttypen in einer unterschiedlichen Reihenfolge akzeptieren, oder Funktionen, die über eine unterschiedliche Anzahl von Argumenten bzw. über unterschiedliche Argumenttypen verfügen, haben unterschiedliche Signaturen. (Beachten Sie, dass die Namen der Argumente keine Auswirkungen auf die Signatur haben.) An der Überladung können auch statische Funktionen beteiligt sein; der statische Status einer Methode hat, genauso wie bei Rückgabetypen, jedoch keinen Einfluss auf ihre Signatur. Daher muss eine statische Methode, die denselben Namen wie eine Instanzenmethode hat, über eine andere Parameterliste verfügen.
Verarbeitungslogik
Beim Aufrufen einer überladenen Funktion wird die Funktion aufgerufen, deren Argumente abhängig vom jeweiligen Typ der an die Funktion übergebenen Argumente am besten mit den übergebenen Argumenten übereinstimmen. Wenn die Argumenttypen einer bestimmten Überladung exakt entsprechen, wird diese Überladung aufgerufen. Wenn die Argumenttypen keiner Überladung exakt entsprechen, wird anhand eines Ausschlussverfahrens ermittelt, welche Überladung aufgerufen wird. Im Zuge des Ausschlussverfahrens wird ermittelt, wie einfach die tatsächlichen Typen in die Typen der verfügbaren Überladungen konvertiert werden können. Weitere Informationen finden Sie unter Umwandlung in JScript. Im folgenden Beispiel verfügt die MethodOverload-Klasse über drei überladene Methoden mit dem Namen Greetings. Die erste Überladung akzeptiert keine Parameter, die zweite einen Parameter vom Typ String, und die dritte Überladung akzeptiert zwei Parameter: einen String-Typ und einen int-Typ.
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 + ".");
}
}
Ausgabe dieses Programms:
Hello, and welcome!
Hello, Mr.Brown!
Hello, Mr.Brown! Your ticket number is 97.