Methodenüberladung
Methodenüberladung in C# ermöglicht es, mehrere Methoden mit demselben Namen in einer Klasse zu definieren, wobei sich diese jeweils in ihren Parametertypen, der Anzahl der Parameter oder beidem unterscheiden. Dies bietet eine übersichtlichere und flexiblere Möglichkeit, verschiedene Eingabeszenarien zu verarbeiten.
Zum Beispiel können zwei Methoden denselben Namen, aber eine unterschiedliche Anzahl von Parametern haben:
index.cs
12345678910111213141516171819using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static int sum(int a, int b, int c) { return a + b + c; } static void Main() { Console.WriteLine(sum(5, 7)); Console.WriteLine(sum(5, 7, 9)); } }
Im obigen Code wurde die Methode sum
überladen, sodass sie zwei Varianten von Parametern besitzt. Eine Methode kann auch unterschiedliche Rückgabetypen für verschiedene Varianten haben, jedoch ist es wichtig, dass keine Mehrdeutigkeit entsteht, da der Compiler sonst einen Fehler anzeigt. Der Hauptweg für den Compiler, zwischen zwei Methoden mit demselben Namen zu unterscheiden, ist die Parameterliste.
Beispiel:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int a, int b) { return a + b; }
Der obige Code ist fehlerhaft, da die Parameter exakt mit denen der ursprünglichen Methode übereinstimmen, während der Rückgabewert unterschiedlich ist. Dies ist nicht zulässig, da es dem Compiler (oder sogar Menschen) unmöglich macht, beim Aufruf der Methode zu entscheiden, welche ausgeführt werden soll:
index.cs
123sum(1, 3); // Should it execute `int sum(int a, int b)` or `long sum(int a, int b)` ? // It is impossible to reach a good answer for the compiler in this case so it shows an error
Deshalb sollte eine überladene Methode mit einem anderen Rückgabetyp auch eine andere Parameterliste besitzen, um sie unterscheidbar zu machen und Mehrdeutigkeiten zu vermeiden. Das folgende Beispiel ist ebenfalls falsch:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int first, int second) { return first + second; }
Dies liegt daran, dass die Namen der Parameter keine Rolle spielen, sondern deren Typen. Die folgenden Überladungsfälle sind gültig:
index.cs
1234567891011121314151617181920212223242526using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static long sum(long a, long b) { return a + b; } static string sum(int a, long b, float c) { return Convert.ToString(a + b + c); } static void Main() { Console.WriteLine(sum(5, 7)); // Calls 'int sum()' Console.WriteLine(sum(500000000000, 700000000000)); // Calls 'long sum()' Console.WriteLine(sum(5, 7, 9)); // Calls 'string sum()' } }
1. Wie unterscheidet der Compiler zwischen überladenen Methoden?
2. Welche der folgenden Optionen ist ein gültiges Beispiel für Methodenüberladung?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Awesome!
Completion rate improved to 2.04
Methodenüberladung
Swipe um das Menü anzuzeigen
Methodenüberladung in C# ermöglicht es, mehrere Methoden mit demselben Namen in einer Klasse zu definieren, wobei sich diese jeweils in ihren Parametertypen, der Anzahl der Parameter oder beidem unterscheiden. Dies bietet eine übersichtlichere und flexiblere Möglichkeit, verschiedene Eingabeszenarien zu verarbeiten.
Zum Beispiel können zwei Methoden denselben Namen, aber eine unterschiedliche Anzahl von Parametern haben:
index.cs
12345678910111213141516171819using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static int sum(int a, int b, int c) { return a + b + c; } static void Main() { Console.WriteLine(sum(5, 7)); Console.WriteLine(sum(5, 7, 9)); } }
Im obigen Code wurde die Methode sum
überladen, sodass sie zwei Varianten von Parametern besitzt. Eine Methode kann auch unterschiedliche Rückgabetypen für verschiedene Varianten haben, jedoch ist es wichtig, dass keine Mehrdeutigkeit entsteht, da der Compiler sonst einen Fehler anzeigt. Der Hauptweg für den Compiler, zwischen zwei Methoden mit demselben Namen zu unterscheiden, ist die Parameterliste.
Beispiel:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int a, int b) { return a + b; }
Der obige Code ist fehlerhaft, da die Parameter exakt mit denen der ursprünglichen Methode übereinstimmen, während der Rückgabewert unterschiedlich ist. Dies ist nicht zulässig, da es dem Compiler (oder sogar Menschen) unmöglich macht, beim Aufruf der Methode zu entscheiden, welche ausgeführt werden soll:
index.cs
123sum(1, 3); // Should it execute `int sum(int a, int b)` or `long sum(int a, int b)` ? // It is impossible to reach a good answer for the compiler in this case so it shows an error
Deshalb sollte eine überladene Methode mit einem anderen Rückgabetyp auch eine andere Parameterliste besitzen, um sie unterscheidbar zu machen und Mehrdeutigkeiten zu vermeiden. Das folgende Beispiel ist ebenfalls falsch:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int first, int second) { return first + second; }
Dies liegt daran, dass die Namen der Parameter keine Rolle spielen, sondern deren Typen. Die folgenden Überladungsfälle sind gültig:
index.cs
1234567891011121314151617181920212223242526using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static long sum(long a, long b) { return a + b; } static string sum(int a, long b, float c) { return Convert.ToString(a + b + c); } static void Main() { Console.WriteLine(sum(5, 7)); // Calls 'int sum()' Console.WriteLine(sum(500000000000, 700000000000)); // Calls 'long sum()' Console.WriteLine(sum(5, 7, 9)); // Calls 'string sum()' } }
1. Wie unterscheidet der Compiler zwischen überladenen Methoden?
2. Welche der folgenden Optionen ist ein gültiges Beispiel für Methodenüberladung?
Danke für Ihr Feedback!