Nehmen wir an, ich habe diese drei Methoden definiert:
int F1(int, int);
int F1(float, float);
Float F1(int, int);
und ich rufe hier die Methode F1 auf:
Console.writeline(F1(5,6).ToString()));
Welche Methode wird er aufrufen und warum?
Nehmen wir an, ich habe diese drei Methoden definiert:
int F1(int, int);
int F1(float, float);
Float F1(int, int);
und ich rufe hier die Methode F1 auf:
Console.writeline(F1(5,6).ToString()));
Welche Methode wird er aufrufen und warum?
Die erste und die dritte Funktion werden nicht im gleichen Namensraum kompiliert.
Dies liegt daran, dass Funktionssignaturen nach Typ und Anzahl der Parameter unterschieden werden, und diese sind gleich. Rückgabetypen werden nicht als Teil der Methodensignatur betrachtet.
Wenn Sie nur den ersten und zweiten (oder zweiten und dritten) im Namensraum hätten, würde der am besten geeignete aufgerufen werden (der mit den übergebenen Ganzzahltypen, da Sie Ganzzahlen übergeben).
Eric Lippert hat einige großartige Blogeinträge über die Feinheiten von C#.
class Program
{
static void Main(string[] args)
{
Add(3, 4,3);
}
public static void Add(int FN, int SN)
{
Console.WriteLine("Total is {0}", FN + SN);
}
public static void Add(int FN, int SN, int TN)
{
Console.WriteLine("Total is {0}", FN + SN + TN);
}
}
Die Begriffe Methodenüberladung und Funktionsüberladung werden austauschbar verwendet. Das Überladen von Methoden ermöglicht es einer Klasse, mehrere Methoden mit demselben Namen zu haben. Aber mit unterschiedlicher Signatur. C#-Funktionen können basierend auf der Anzahl, dem Typ (int, float etc.) und der Art (Value, ref oder out) der Parameter überladen werden. Die Signatur der Methode enthält keinen Rückgabetyp und keinen Parameter-Modifikator. Es ist also nicht möglich, eine Funktion auf der Grundlage des Rückgabetyps und des Modifikators params zu überladen.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.