This article is currently in the process of being translated into German (~99% done).
Methods (functions)
Während Eigenschaften und Felder als passive Teile einer Klasse gelten, sind Methoden aktiv. Sie führen eine oder mehrere Aktionen aus und können optionalerweise einen Wert zurück geben. In anderen Programmiersprachen werden sie als Funktionen oder "funcs" bezeichnet, aber in C#, wo sie einer Klasse angehören, heißen sie Methoden. Methoden sind sehr nützlich, da sie das Einkapseln von Funktionalitäten ermöglichen, die an anderer Stelle wiederverwendet werden können.
Eine Methode wird wie folgt definiert:
<visibility> <return type> <name>(<parameters>)
{
<method code>
}
Hier ein einfaches Beispiel:
public int AddNumbers(int number1, int number2)
{
return number1 + number2;
}
Diese sehr einfach gehaltene Methode addiert zwei Zahlen und gibt das Ergebnis zurück. Schauen wir uns die Teile Schritt für Schritt an:
- public definiert die Sichtbarkeit (mehr hierzu in einem späteren Teil der Anleitung)
- int ist der Rückgabewert. Soll die Methode keinen Rückgabewert erzeugen, wird das Schlüsselwort void benutzt.
- AddNumbers ist der eigens festgelegte Name der Methode.
- (int number1, int number2) - Dies sind die Parameter die die Methode annimmt (mehr dazu in einem anderen Teil der Anleitung). Parameter sind optional, d.h. der eingeklammerte Teil kann frei gelassen werden. Die Klammern an sich sind jedoch nicht optional.
- Innerhalb der Methode (der Teil zwischen den geschweiften Klammern) ist der eigentliche Code der Methode zu finden. Dieser kann aus einer oder mehreren Zeilen bestehen.
Um eine Methode aufzurufen, muss lediglich der Name gefolgt von Klammern benutzt werden. Innerhalb der Klammern sollten die Parameter übergeben werden (wenn die Methode Parameter akzeptiert). Dies geschieht wie folgt:
AddNumbers(3, 39);
Da Methoden innerhalb von Klassen definiert werden, kann es vorkommen, dass eine Methode innerhalb einer anderen Klasse aufgerufen werden soll. In diesem Fall muss die Methode mit dem Präfix des Objektes versehen werden, aus welchem sie aufgerufen wird. Falls die Methode mit dem static-Schlüsselwort versehen wurde (dazu später mehr), muss der Präfix dem Klassennamen der Methode entsprechen. Nun ein Beispiel, in dem wir die Methode AddNumbers() aus einer anderen Klasse namens MathHelper aufrufen:
public void DoMath()
{
MathHelper mathHelper = new MathHelper();
int result = mathHelper.AddNumbers(4, 38);
Console.WriteLine(result);
}
Rückgabetypen der Methoden
Zusatz zu Rückgabewerten: In den obigen Besipielen haben wir eine Ganzzahl (int) als Rückgabewert definiert, allerdings kann jeder C#-Datentyp zurückgegeben werden. Man kann sogar eine Methode deklarieren, die keinen Rückgabewert erzeugt, wie wir am Beispiel der DoMath()-Methode erkennen können. Hier wurde das Rückgabe-Schlüsselwort int durch void ersetzt, was bedeutet, dass die Methode keinen Wert zurückgibt. In einigen Programmiersprachen werden Funktionen ohne Rückgabewert Prozeduren genannt, in C# heißen sie dennoch Methoden.
Wann immer eine Methode mit einem Rückgabewert deklariert wird, MUSS die Methode auch einen Wert von diesem Datentyp zurückgeben, andernfalls wird der Compiler sofort Alarm schlagen.
public int AddNumbers(int number1, int number2)
{
Console.WriteLine(number1 + number2);
}
Compiler error: AddNumbers(int, int)': not all code paths return a value
Das bedeutet, dass ein oder mehrere return-Schlüsselwörter innerhalb der Methode benötigt werden, wenn die Methode einen deklarierten Rückgabe-Datentyp aufweist. Es können mehrere Schlüsselwörter erforderlich sein, je nach Situation, wenn mehrere Code-Pfade vorhanden sind, wie im folgenden Beispiel:
public int AddLargeNumbers(int number1, int number2)
{
if((number1 > 1000) && (number2 > 1000))
{
return number1 + number2;
}
return 0;
}
In diesem Fall wird ebenfalls ein zweites return-Schlüsselwort benötigt - wird es weggelassen, wird der Compiler Alarm schlagen, da die abhängige Aussage if() dazu führen kann, dass der erste Rückgabewert nicht ausgelöst wird.
Zusammenfassung
Methoden bieten die Möglichkeit, Funktionalität einzukapseln und an anderen Orten wieder zu verwenden. Durch Deklaration von Parametern für eine Methode können unterschiedliche Rückgaben erzeugt werden. In den Beispielen wurden einige wenige Parameter-Typen verwendet, im folgenden Artikel werden Methoden-Parameter noch ausführlicher behandelt.