Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

Methoden (C#-Programmierhandbuch)

Eine Methode ist ein Codeblock, der eine Reihe von Anweisungen enthält. In C# werden alle Anweisungen im Kontext einer Methode ausgeführt.

Methoden werden innerhalb einer Klasse oder einer Struktur deklariert, indem die Zugriffsebene, der Rückgabewert, der Name der Methode und die Methodenparameter angegeben werden. Methodenparameter sind von runden Klammern umgeben und durch Kommas getrennt. Leere Klammern geben an, dass die Methode keine Parameter benötigt. Diese Klasse enthält drei Methoden:

class Motorcycle
{
    public void StartEngine() { }
    public void AddGas(int gallons) { }
    public int Drive(int miles, int speed) { return 0; }
}

Das Aufrufen einer Methode für ein Objekt ähnelt dem Zugriff auf ein Feld. Fügen Sie hinter dem Objektnamen einen Punkt, den Namen der Methode und die Klammern hinzu. Argumente werden innerhalb der Klammern aufgelistet und durch Kommas voneinander getrennt. Die Methoden der Motorcycle-Klasse können daher wie folgt aufgerufen werden:

Motorcycle moto = new Motorcycle();

moto.StartEngine();
moto.AddGas(15);
moto.Drive(5, 20);

Wie im vorherigen Codeausschnitt dargestellt wurde, werden Argumente an eine Methode übergeben, indem sie beim Aufruf der Methode einfach in Klammern bereitgestellt werden. Für die aufgerufene Methode werden die eingehenden Argumente als Parameter bezeichnet.

Die von einer Methode empfangenen Parameter werden ebenfalls in einem Klammernpaar bereitgestellt, aber für jeden Parameter müssen der Typ und ein Name angegeben werden. Der Name muss nicht mit dem Argument übereinstimmen. Beispiel:

public static void PassesInteger()
{
    int fortyFour = 44;
    TakesInteger(fortyFour);
}
static void TakesInteger(int i)
{
    i = 33;
}

In diesem Fall übergibt die Methode PassesInteger ein Argument an die Methode TakesInteger. Innerhalb von PassesInteger besitzt das Argument den Namen fortyFour, aber in TakeInteger ist es ein Parameter mit dem Namen i. Dieser Parameter ist nur innerhalb der TakesInteger-Methode vorhanden. Sie können einer beliebigen Anzahl von anderen Variablen den Namen i zuweisen, und diese können einem beliebigen Typ angehören, solange sie keine innerhalb dieser Methode deklarierten Parameter oder Variablen sind.

Beachten Sie, dass TakesInteger dem bereitgestellten Argument einen neuen Wert zuweist. Es wäre denkbar, dass sich diese Änderung auf die PassesInteger-Methode auswirkt, wenn TakeInteger zurückgegeben wird, doch der Wert in der Variable fortyFour bleibt unverändert. Das liegt daran, dass int ein Werttyp ist. Wenn ein Werttyp an eine Methode übergeben wird, wird anstelle des Objekts standardmäßig eine Kopie übergeben. Da es sich um Kopien handelt, wirken sich Änderungen am Parameter nicht auf die aufrufende Methode aus. Die Bezeichnung Werttyp beruht auf eben dieser Tatsache, dass anstelle des Objekts selbst eine Kopie des Objekts übergeben wird. Der Wert wird übergeben, nicht das Objekt selbst.

Weitere Informationen zum Übergeben von Werttypen finden Sie unter Übergeben von Werttypparametern (C#-Programmierhandbuch). Eine Liste der in C# integrierten Werttypen finden Sie unter Tabelle der Werttypen (C#-Referenz).

Der wesentliche Unterschied zu Verweistypen besteht darin, da diese als Verweis übergeben werden. Wenn ein auf einem Verweistyp basierendes Objekt an eine Methode übergeben wird, wird keine Kopie des Objekts angelegt. Stattdessen wird ein Verweis auf das als Methodenargument verwendete Objekt erstellt und übergeben. Durch diesen Verweis vorgenommene Änderungen wirken sich daher auf die aufrufende Methode aus. Ein Verweistyp wird wie folgt mit dem class-Schlüsselwort erstellt:

public class SampleRefType
{
    public int value;
}

Wenn ein auf diesem Typ basierendes Objekt an eine Methode übergeben wird, wird es als Verweis übergeben. Beispiel:

public static void TestRefType()
{
    SampleRefType rt = new SampleRefType();
    rt.value = 44;
    ModifyObject(rt);
    System.Console.WriteLine(rt.value);
}
static void ModifyObject(SampleRefType obj)
{
    obj.value = 33;
}

In diesem Beispiel wird im Prinzip der gleiche Vorgang wie im vorherigen Beispiel ausgeführt. Da jedoch ein Verweistyp verwendet wird, wirkt sich die durch ModifyObject vorgenommene Änderung auf das in der TestRefType-Methode erstellte Objekt aus. Die TestRefType-Methode zeigt daher den Wert 33 an.

Weitere Informationen finden Sie unter Übergeben von Verweistypparametern (C#-Programmierhandbuch) und Verweistypen (C#-Referenz).

Methoden können dem Aufrufer einen Wert zurückgeben. Wenn der Rückgabetyp (der vor dem Methodennamen angezeigte Typ) nicht void ist, kann die Methode den Wert mithilfe des return-Schlüsselworts zurückgeben. Durch eine Anweisung, die aus dem return-Schlüsselwort und einem Wert besteht, der mit dem Rückgabetyp übereinstimmt, wird der Wert an den Methodenaufrufer zurückgegeben. Das return-Schlüsselwort beendet außerdem die Ausführung der Methode. Wenn der Rückgabetyp void ist, können Sie mit einer return-Anweisung ohne Wert die Ausführung der Methode beenden. Ohne das return-Schlüsselwort wird die Ausführung der Methode beim Erreichen des Codeblocks beendet. Damit bei Verwendung des return-Schlüsselworts ein Wert zurückgegeben wird, darf der Rückgabetyp der Methode nicht void sein. Diese beiden Methoden verwenden das return-Schlüsselwort beispielsweise, um ganze Zahlen zurückzugeben:

class SimpleMath
{
    public int AddTwoNumbers(int number1, int number2)
    {
        return number1 + number2;
    }

    public int SquareANumber(int number)
    {
        return number * number;
    }
}

Um einen von einer Methode zurückgegebenen Wert zu verwenden, kann die aufrufende Methode überall dort, wo ein Wert desselben Typs ausreicht, den Methodenaufruf selbst verwenden. Außerdem können Sie den Rückgabewert einer Variablen zuweisen: Zum Beispiel erreichen die beiden folgenden Codebeispiele dasselbe Ziel:

int result = obj.AddTwoNumbers(1, 2);
obj.SquareANumber(result);

obj.SquareANumber(obj.AddTwoNumbers(1, 2));

Das Verwenden einer Zwischenvariablen (in diesem Fall result) zum Speichern eines Werts ist optional. Diese Vorgehensweise verbessert womöglich die Lesbarkeit des Codes, kann aber auch erforderlich sein, wenn der Wert öfter als einmal verwendet wird.

Weitere Informationen finden Sie unter return (C#-Referenz).

Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:

  • 1.6.5 Methoden

  • 10.5 Methoden

Anzeigen: