TOC

This article has been localized into German by the community.

Grundlagen:

Funktionsparameter

Im vorherigen Kapitel haben wir uns die Funktionen angesehen. Wir haben über die Parameter gesprochen, aber nur kurz. Während Parameter sehr einfach und direkt zu verwenden sind, gibt es Tricks um sie noch effektiver zu machen.

Das erste, was wir uns ansehen werden, sind die "out" und "ref" Modifizierer. C# und auch weitere Sprachen unterscheiden zwischen zwei Parametern: "Wert" und "Referenz". Standardmäßig wird in C# der "Wert" genommen. Es bedeutet, dass, wenn Sie eine Variable an einen Funktionsaufruf übergeben, tatsächlich eine Kopie des Objekts anstatt einer Referenz darauf gesendet wird. Das bedeutet auch, dass Sie Änderungen innerhalb der Funktion vornehmen können, ohne das ursprüngliche Objekt, das Sie als Parameter übergeben haben, zu beeinflussen.

Mit dem Schlüsselwort "ref" und "out" können wir dieses Verhalten ändern, sodass wir einen Verweis auf das Objekt statt auf seinen Wert übergeben.

Der "ref" Modifizierer

Betrachten Sie folgendes Beispiel:

static void Main(string[] args)
{
    int number = 20;
    AddFive(number);
    Console.WriteLine(number);
    Console.ReadKey();
}

static void AddFive(int number)
{
    number = number + 5;
}

Wir erstellen einen Integer und weisen ihm die Zahl 20 zu, danach rufen wir die AddFive() Methode auf welche die Zahl 5 zu unserem Integer addiert. Aber macht sie es auch? Nein. Den Wert den wir dieser Funktion übergeben haben, wird niemals zurückgegeben, weil wir eine Kopie der Zahl anstelle der Referenz übergeben haben. Wie auch immer, in diesem Fall würden wir gerne die Zahl innerhalb der Funktion verändern. Darum brauchen wir jetzt das Schlüsselwort "ref".

static void Main(string[] args)
{
    int number = 20;
    AddFive(ref number);
    Console.WriteLine(number);
    Console.ReadKey();
}

static void AddFive(ref int number)
{
    number = number + 5;
}

Wie Sie sehen können, haben wir nur das Schlüsselwort "ref" bei der Funktionsdeklaration ebenso wie beim Funktionsaufruf hinzugefügt. Wenn Sie das Programm jetzt ausführen, werden Sie sehen, dass die Zahl geändert wurde, da sie jetzt vom Funktionsaufruf wieder zurückgegeben wird.

Der "out" Modifizierer

Der "out" Modifizierer arbeitet sehr ähnlich wie der "ref" Modifizierer. Beides stellen sicher, dass der Parameter als Referenz anstatt als Wert übergeben wird. Sie unterscheiden sich in zwei wichtigen Punkten: Ein an einen ref-Modifizierer übergebener Wert muss vor dem Aufruf der Methode initialisiert werden. Dies gilt nicht für den out-Modifizierer, in dem Sie nicht initialisierte Werte verwenden können. Andererseits können Sie einen Funktionsaufruf nicht mit einem out-Parameter belassen, ohne ihm einen Wert zuzuweisen. Da Sie nicht initialisierte Werte als out-Parameter übergeben können, können Sie einen out-Parameter nicht wirklich innerhalb einer Funktion verwenden - Sie können ihm nur einen neuen Wert zuweisen.

Ob Sie die Funktion "out" oder "ref" verwenden, hängt von der Situation ab, in der Sie sie verwenden. Beide werden normalerweise verwendet, um das Problem zu umgehen, nur einen Wert von einer Funktion mit C # zurückzugeben.

Den "out" Modifizierer verwenden Sie gleich wie den "ref" Modifizierer, der oberhalb gezeigt wurde. Sie müssen nur das Schlüsselwort "ref" zu "out" ändern.

Der "parameter"-Modifizierer

Bis jetzt haben alle unsere Funktionen eine feste Anzahl an Parametern akzeptiert. In manchen Fällen benötigen Sie jedoch eine Funktion, die eine beliebige Anzahl an Parametern enthält. Das kann man lösen, indem man ein Array oder eine Liste an Parametern annimmt, etwa so:

static void GreetPersons(string[] names) { }

Es wäre jedoch ein wenig ungeschickt, es aufzurufen. In der kürzesten Form würde es so aussehen:

GreetPersons(new string[] { "John", "Jane", "Tarzan" });

Das wäre zulässig, aber mit dem "params"-Schlüsselwort könnte man es eleganter lösen:

static void GreetPersons(params string[] names) { }

Dieser Aufruf würde dann wie folgt aussehen:

GreetPersons("John", "Jane", "Tarzan");

Ein weiterer Vorteil der Verwendung des Params-Ansatzes ist, dass er auch ohne Parameter übergeben werden darf. Funktionen mit Parametern können auch weitere Parameter enthalten, solange der Parameter mit dem Schlüsselwort params der Letzte ist. Außerdem kann pro Funktion nur ein Parameter mit dem Schlüsselwort params verwendet werden. Hier ist ein letztes und vollständigeres Beispiel:

static void Main(string[] args)
{
    GreetPersons(0);
    GreetPersons(25, "John", "Jane", "Tarzan");
    Console.ReadKey();
}

static void GreetPersons(int someUnusedParameter, params string[] names)
{
    foreach(string name in names)
Console.WriteLine("Hello, " + name);
}

This article has been deprecated!

This article has been re-organized and updated to better match the rest of the tutorial.

We suggest that you read this article instead: Method parameters


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!