Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Methodenüberladung | OOP-Grundlagen
C# Jenseits der Grundlagen

bookMethodenü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

index.cs

copy
12345678910111213141516171819
using 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

index.cs

copy
12345678910
static 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

index.cs

copy
123
sum(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

index.cs

copy
12345678910
static 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

index.cs

copy
1234567891011121314151617181920212223242526
using 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?

question mark

Wie unterscheidet der Compiler zwischen überladenen Methoden?

Select the correct answer

question mark

Welche der folgenden Optionen ist ein gültiges Beispiel für Methodenüberladung?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 7

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 2.04

bookMethodenü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

index.cs

copy
12345678910111213141516171819
using 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

index.cs

copy
12345678910
static 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

index.cs

copy
123
sum(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

index.cs

copy
12345678910
static 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

index.cs

copy
1234567891011121314151617181920212223242526
using 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?

question mark

Wie unterscheidet der Compiler zwischen überladenen Methoden?

Select the correct answer

question mark

Welche der folgenden Optionen ist ein gültiges Beispiel für Methodenüberladung?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 7
some-alt