Übung: Rückgabewerte und Eingabeparameter von Methoden

Abgeschlossen

In der vorherigen Lerneinheit haben Sie ein Programmierszenario zum „Würfeln“ verwendet, um den Unterschied zwischen zustandsbehafteten (Instanz-) und zustandslosen (statischen) Methoden zu veranschaulichen. Anhand dieses Szenario lassen sich auch andere wichtige Konzepte beim Aufrufen von Methoden verdeutlichen. Zum Beispiel:

  • Behandeln des Rückgabewerts einer Methode
  • Methodenparameter und Übergeben von Argumenten an eine Methode.
  • Auswählen einer überladenen Version einer Methode

Rückgabewerte

Einige Methoden sind so ausgelegt, dass sie ihre Funktion erfüllen und „unauffällig“ enden. Das heißt, sie geben keinen Wert zurück, wenn sie abgeschlossen sind. Sie werden als void-Methoden bezeichnet.

Andere Methoden sind so konzipiert, dass sie nach Abschluss einen Wert zurückgeben. Der Rückgabewert ist in der Regel das Ergebnis eines Vorgangs. Ein Rückgabewert stellt das primäre Kommunikationsverfahren einer Methode mit dem Code dar, der diese Methode aufgerufen hat.

Sie haben gesehen, dass die Random.Next()-Methode einen Wert vom Typ int zurückgibt, der eine zufällig generierte Zahl enthält. Eine Methode kann aber so gestaltet sein, dass sie jeden Datentyp zurückgibt, auch eine andere Klasse. Beispielsweise verfügt die String-Klasse über einige Methoden, die eine Zeichenfolge zurückgeben, andere, die Integer zurückgeben, und wieder andere, die einen booleschen Wert zurückgeben.

Beim Aufrufen einer Methode, die einen Wert zurückgibt, weisen Sie den Rückgabewert häufig einer Variable zu. Auf diese Weise können Sie den Wert später im Code verwenden. Im Würfelszenario haben Sie der Variable roll den Rückgabewert von Random.Next() zugewiesen:

int roll = dice.Next(1, 7);

In einigen Fällen können Sie den Rückgabewert direkt verwenden, ohne ihn einer Variable zuzuweisen. Sie können den Rückgabewert z. B. wie folgt an der Konsole ausgeben:

Console.WriteLine(dice.Next(1, 7));

Selbst wenn eine Methode einen Rückgabewert hat, ist es möglich, sie aufzurufen, ohne den Rückgabewert zu verwenden. Sie können den Rückgabewert z. B. ignorieren, indem Sie die Methode wie folgt aufrufen:

dice.Next(1, 7);

Das Ignorieren des Rückgabewerts wäre jedoch sinnlos. Der Grund, warum Sie die Next()-Methode aufrufen, ist ja gerade, dass Sie den nächsten zufälligen Wert abrufen möchten.

Methodenparameter und Argumente in der aufrufenden Anweisung

Wenn Sie eine Methode aufrufen, können Sie Werte übergeben, die von der Methode zum Ausführen der Aufgabe verwendet werden. Diese Werte werden als Argumente bezeichnet. Die Methode verwendet die Argumente, um den Parametern, die in der Signatur der Methode definiert sind, Werte zuzuweisen. Eine Methode kann einen oder mehrere Parameter verwenden, um ihre Aufgabe auszuführen, oder überhaupt keinen.

Hinweis

Die Begriffe „Parameter“ und „Argument“ werden oft als Synonyme verwendet. „Parameter“ bezieht sich jedoch auf die Variable, die innerhalb der Methode verwendet wird. Ein „Argument“ ist ein Wert, der beim Aufruf der Methode übergeben wird.

Die meisten Methoden akzeptieren einen oder mehrere Parameter. Mit Parametern können Sie konfigurieren, wie die Methode ihre Aufgabe ausführt. Sie können die Eingabeparameter aber auch direkt nutzen. Die Random.Next()-Methode verwendet beispielsweise Parameter, um die oberen und unteren Grenzwerte des Rückgabewerts zu konfigurieren. Console.WriteLine() hingegen verwendet den Parameter direkt und gibt seinen Wert an der Konsole aus.

Methoden verwenden eine Methodensignatur, um die Anzahl der Parameter zu definieren, die die Methode akzeptiert, sowie den Datentyp der einzelnen Parameter. Die Codierungsanweisung, die die Methode aufruft, muss die von der Methodensignatur angegebenen Anforderungen erfüllen. Einige Methoden bieten Optionen für die Anzahl und den Typ von Parametern, die die Methode akzeptiert.

Wenn ein Aufrufer die Methode aufruft, werden für jeden Parameter konkrete Werte bereitgestellt, die als Argumente bezeichnet werden. Die Argumente müssen mit dem Parametertyp kompatibel sein. Der Argumentname muss jedoch, wenn er im Aufrufcode verwendet wird, nicht mit dem Parameternamen in der Methode übereinstimmen.

Betrachten Sie folgenden Code:

Random dice = new Random();
int roll = dice.Next(1, 7);
Console.WriteLine(roll);

Die erste Codezeile erstellt eine Instanz der Random-Klasse mit dem Namen dice. Die zweite Codezeile verwendet die Methode dice.Next(1, 7), um einer ganzen Zahl namens roll einen Zufallswert zuzuweisen. Beachten Sie, dass die aufrufende Anweisung zwei durch ein ,-Symbol getrennte Argumente bereitstellt. Die Next()-Methode enthält eine Methodensignatur, die zwei Parameter vom Typ int akzeptiert. Diese Parameter werden verwendet, um die unteren und oberen Begrenzungen für die zurückgegebene Zufallszahl zu konfigurieren. Die letzte Codezeile verwendet die Console.WriteLine()-Methode, um den Wert der roll-Konsole auszugeben.

Die an eine Methode übergebenen Argumente müssen denselben Datentyp aufweisen wie die entsprechenden Parameter, die von der Methode definiert werden. Wenn Sie versuchen, ein falsch typisiertes Argument an eine Methode zu übergeben, erkennt der C#-Compiler Ihren Fehler und zwingt Sie, Ihre Aufrufanweisung zu aktualisieren, bevor Ihr Code kompiliert und ausgeführt werden kann. Die Typüberprüfung stellt eine Möglichkeit dar, mit der C# und .NET verhindern, dass zur Laufzeit bei Endbenutzer*innen Fehler auftreten.

Hinweis

Parameter kommen zwar sehr häufig zum Einsatz, aber nicht alle Methoden benötigen sie für ihre Aufgaben. Die Console-Klasse enthält z. B. eine Console.Clear()-Methode, die keine Parameter verwendet. Diese Methode wird dazu verwendet, alle an der Konsole angezeigten Informationen zu löschen, und für diese Aufgabe sind keine Parameter erforderlich.

Überladene Methoden

Viele Methoden in der .NET-Klassenbibliothek haben überladene Methodensignaturen. Dies ermöglicht es Ihnen unter anderem, die Methode mit oder ohne die in der Aufrufanweisung angegebenen Argumente aufzurufen.

Eine überladene Methode wird mit mehreren Methodensignaturen definiert. Überladene Methoden bieten verschiedene Möglichkeiten, die Methode aufzurufen, oder stellen unterschiedliche Datentypen bereit.

In einigen Fällen werden überladene Versionen einer Methode verwendet, um einen Parameter mit anderen Datentypen zu definieren. Beispielsweise verfügt die Console.WriteLine()-Methode über 19 verschiedene überladene Versionen. Die meisten dieser Überladungen ermöglichen der Methode, andere Typen zu akzeptieren und dann die angegebenen Informationen an der Konsole auszugeben. Betrachten Sie folgenden Code:

int number = 7;
string text = "seven";

Console.WriteLine(number);
Console.WriteLine();
Console.WriteLine(text);

In diesem Beispiel werden drei separate überladene Versionen der WriteLine()-Methode aufgerufen.

  • Die erste WriteLine()-Methode verwendet eine Methodensignatur, die einen int-Parameter definiert.
  • Die zweite WriteLine()-Methode verwendet eine Methodensignatur, die keine Parameter definiert.
  • Die dritte WriteLine()-Methode verwendet eine Methodensignatur, die einen string-Parameter definiert.

In anderen Fällen definieren überladene Versionen einer Methode eine abweichende Anzahl von Parametern. Mit alternativen Parametern haben Sie häufig mehr Kontrolle über das gewünschte Ergebnis. Die Random.Next()-Methode hat beispielsweise überladene Versionen, die es Ihnen ermöglichen, verschiedene Stufen der Einschränkung für die zufällig erzeugte Zahl festzulegen.

In der folgenden Übung wird die Random.Next()-Methode aufgerufen, um zufällige ganzzahlige Werte mit unterschiedlichen Stufen der Einschränkung zu generieren:

  1. Stellen Sie sicher, dass eine leere „Program.cs“-Datei in Visual Studio Code geöffnet ist.

    Öffnen Sie bei Bedarf Visual Studio Code, und führen Sie dann die folgenden Schritte aus, um eine „Program.cs“-Datei im Editor vorzubereiten:

    1. Klicken Sie im Menü Datei auf Ordner öffnen.

    2. Verwenden Sie das Dialogfeld „Ordner öffnen“, um zum Ordner CsharpProjects zu navigieren und diesen dann zu öffnen.

    3. Wählen Sie im EXPLORER-Bereich von Visual Studio Code die Datei Program.cs aus.

    4. Wählen Sie im Visual Studio Code-Menü Auswahl die Option Alle auswählen aus, und drücken Sie dann die ENTF-Taste.

  2. Geben Sie den folgenden Code ein, um die überladenen Versionen der Random.Next()-Methode zu untersuchen:

    Random dice = new Random();
    int roll1 = dice.Next();
    int roll2 = dice.Next(101);
    int roll3 = dice.Next(50, 101);
    
    Console.WriteLine($"First roll: {roll1}");
    Console.WriteLine($"Second roll: {roll2}");
    Console.WriteLine($"Third roll: {roll3}");
    
    
  3. Wählen Sie im Visual Studio Code-Menü Datei die Option Speichern aus.

  4. Klicken Sie im Panel „Explorer“ mit der rechten Maustaste auf TestProject, und klicken Sie dann auf In integriertem Terminal öffnen, um ein Terminal am Speicherort des TestProject-Ordners zu öffnen.

    Vergewissern Sie sich, dass der in der Eingabeaufforderung angezeigte Ordnerpfad auf den Ordner verweist, der Ihre Datei „Program.cs“ enthält.

  5. Geben Sie an der Eingabeaufforderung des Terminals dotnet run ein, um Ihren Code auszuführen, und drücken Sie dann die EINGABETASTE.

    Das Ergebnis sollte der folgenden Ausgabe ähneln:

    First roll: 342585470
    Second roll: 43
    Third roll: 89
    

    Die generierten Zahlen sind zufällig, sodass Ihre Ergebnisse abweichen. In diesem Beispiel wird jedoch der Bereich der angezeigten Ergebnisse verdeutlicht.

  6. Nehmen Sie sich einen Moment Zeit, um den Code zu untersuchen.

    Die erste Version der Next()-Methode setzt keine Ober- und Untergrenze, sodass Werte im Bereich von 0 bis 2,147,483,647 zurückgegeben werden. Dies ist der Höchstwert, der in int gespeichert werden kann.

    Die zweite Version der Next()-Methode legt den Höchstwert als Obergrenze fest, sodass in diesem Fall ein Zufallswert zwischen 0 und 100 zurückgegeben wird.

    Die dritte Version der Next()-Methode legt sowohl den Mindest- als auch den Höchstwert fest, sodass in diesem Fall ein Zufallswert zwischen 50 und 100 zurückgegeben wird.

  7. Schließen Sie das Panel „Terminal“.

Sie haben in dieser Lerneinheit bereits mehrere Themen untersucht. Im Folgenden finden Sie eine kurze Liste der behandelten Themen:

  • Sie haben untersucht, wie Sie den Rückgabewert einer Methode verwenden (sofern die Methode einen Rückgabewert bereitstellt).
  • Sie haben untersucht, wie eine Methode Parameter verwenden kann, die als bestimmte Datentypen definiert sind.
  • Sie haben die überladenen Versionen einiger Methoden untersucht, die abweichende Parameter oder Parametertypen aufweisen.

Verwendung von IntelliSense

Visual Studio Code bietet IntelliSense-Features, die auf einem Sprachdienst basieren. Der Sprachdienst für C# bietet beispielsweise eine intelligente Codevervollständigungen, die auf der Sprachsemantik und einer Analyse Ihres Quellcodes basieren. In diesem Abschnitt verwenden Sie IntelliSense, um die Random.Next()-Methode zu implementieren.

Da IntelliSense im Code-Editor verfügbar ist, können Sie viel über eine Methode lernen, ohne Ihre Programmierumgebung zu verlassen. Während der Codeeingabe zeigt IntelliSense Hinweise und Referenzinformationen in einem Popupfenster an der Cursorposition an. Dabei ändert sich der Inhalt im IntelliSense-Popupfenster je nach Kontext.

Wenn Sie beispielsweise das Wort dice langsam eingeben, zeigt IntelliSense alle C#-Schlüsselwörter, -Bezeichner (oder besser gesagt, Variablennamen im Code) und -Klassen in der .NET-Klassenbibliothek an, die mit den eingegebenen Buchstaben übereinstimmen. Mit den AutoVervollständigen-Funktionen des Code-Editors können Sie im IntelliSense-Popupfenster die Eingabe des Worts mit der höchsten Übereinstimmung vervollständigen. Probieren Sie es aus.

  1. Stellen Sie sicher, dass die Datei „Program.cs“ in Visual Studio Code geöffnet ist.

    Ihre App sollte folgenden Code enthalten:

    Random dice = new Random();
    int roll1 = dice.Next();
    int roll2 = dice.Next(101);
    int roll3 = dice.Next(50, 101);
    
    Console.WriteLine($"First roll: {roll1}");
    Console.WriteLine($"Second roll: {roll2}");
    Console.WriteLine($"Third roll: {roll3}");
    
    
  2. Um IntelliSense auszuprobieren, geben Sie unten in der Codedatei langsam die Buchstaben d, i und dann c ein.

  3. Beachten Sie das IntelliSense-Popupfenster, das während Ihrer Eingabe angezeigt wird.

    Das angezeigte IntelliSense-Popupfenster sollte eine Liste mit Vorschlägen enthalten. Nach der Eingabe von dic sollte der Bezeichner dice ganz oben in der Liste stehen.

  4. Drücken Sie die TAB-Taste auf der Tastatur.

    Wie Sie sehen, wird das Wort dice im Editor vervollständigt. Sie können die NACH-OBEN- und NACH-UNTEN-Taste verwenden, um die Auswahl zu ändern, bevor Sie die TAB-Taste drücken.

    Hinweis

    Wenn das IntelliSense-Fenster ausgeblendet wird, kann es mit der backspace-Taste ausgewählt werden. Geben Sie dann das letzte Zeichen noch einmal ein, um IntelliSense wieder zu öffnen.

  5. Um den Operator für den Memberzugriff anzugeben, geben Sie das Zeichen . ein.

    Beachten Sie, dass das IntelliSense-Popupfenster bei der Eingabe von . erneut angezeigt wird und nun eine ungefilterte Liste aller verfügbaren Methoden (und anderer Member der Klasse) enthält.

  6. Geben Sie N ein.

    Die Liste wird daraufhin gefiltert, und das Wort Next sollte als erste Auswahl angezeigt werden.

  7. Um das gesamte Wort automatisch zu vervollständigen, drücken Sie die TAB-Taste.

  8. Geben Sie zum Angeben des Operators für den Methodenaufruf ( ein.

    Sie werden feststellen, dass die schließende Klammer automatisch für Sie hinzugefügt wird.

    Der Operator für den Methodenaufruf ist das Klammernpaar rechts neben dem Methodennamen. In diesem Teil der Aufrufanweisung geben Sie die Argumente an, die an die Methode übergeben werden. Der Operator für den Methodenaufruf ist beim Aufruf der Methode unbedingt erforderlich.

  9. Beachten Sie, dass im IntelliSense-Popupfenster nun ausführliche Informationen zur Random.Next()-Methode angezeigt werden.

  10. Nehmen Sie sich etwas Zeit, und sehen Sie sich das IntelliSense-Popupfenster für die Random.Next()-Methode genauer an.

    Hinweis

    Wenn das IntelliSense-Popup geschlossen wurde, bevor Sie die Möglichkeit hatten, es sich genauer anzusehen, löschen Sie den Aufrufoperator () und geben Sie dann ( ein, um das IntelliSense-Popup wieder anzuzeigen.

    Das Popupfenster enthält drei Abschnitte – einen auf der linken und zwei auf der rechten Seite.

    Auf der rechten Seite sollte im oberen Abschnitt int Random.Next(int minValue, int maxValue) und im unteren Abschnitt Returns a non-negative random integer. angezeigt werden. int definiert den Rückgabetyp der Methode. Das bedeutet, das bei Ausführung dieser Version der Methode ein Wert vom Typ int zurückgegeben wird.

    Auf der linken Seite des IntelliSense-Popupfensters wird 1/3 angezeigt.

    1/3 gibt an, dass Sie die erste von drei Methodensignaturen für die Next()-Methode anzeigen. Beachten Sie, dass diese Version der Methodensignatur die Methode ohne Parameter verwenden kann (es werden keine Argumente an die Methode in der aufrufenden Anweisung übergeben).

    Außerdem gibt es einen kleinen Pfeil über und unter 1/3.

  11. Um die zweite überladene Version der Methode zu untersuchen, drücken Sie die NACH-UNTEN-Taste auf der Tastatur.

    Mit der NACH-OBEN- und NACH-UNTEN-Taste können Sie zwischen den verschiedenen überladenen Versionen wechseln. Dabei werden auf der linken Seite des IntelliSense-Popupfensters jeweils 1/3, 2/3 oder 3/3 und auf der rechten Seite hilfreiche Erklärungen angezeigt.

  12. Nehmen Sie sich etwas Zeit, um die überladenen Versionen der Random.Next()-Methode zu untersuchen.

    Die zweite überladene Version der 2/3-Methode informiert Sie darüber, dass die Next()-Methode einen Parameter int maxValue akzeptieren kann. Die Beschreibung deutet darauf hin, dass maxValue die exklusive Obergrenze für die Zahl ist, die von der Next()-Methode generiert werden soll. „Exklusiv“ bedeutet, dass die zurückgegebene Zahl kleiner als maxValue sein muss. Wenn Sie also dice.Next(1,7); angeben, beträgt die größtmögliche Würfelzahl 6. Beachten Sie, dass die Meldung am Ende des Abschnitts wie folgt aktualisiert wurde: Returns a non-negative random integer that is less than the specified maximum.

    Und die dritte überladene Version der 3/3-Methode informiert Sie darüber, dass die Next()-Methode sowohl int minValue als auch int maxValue als Parameter akzeptieren kann. Der neue minValue-Parameter gibt die Untergrenze für die Zahl an, die von der Next()-Methode generiert werden soll. Da die Untergrenze inklusiv und nicht exklusiv ist, kann der Rückgabewert gleich minValue sein. Die Meldung unten lautet nun: Returns a random integer that is within a specified range.

    In diesem Fall stellt IntelliSense alle Informationen bereit, die Sie zum Auswählen der entsprechenden Überladung benötigen, einschließlich einer ausführlichen Erläuterung von maxValue und minValue. Möglicherweise treten jedoch Situationen auf, in denen Sie die Dokumentation der Methode lesen müssen.

Weitere Informationen zu überladenen Methoden finden Sie unter learn.microsoft.com

Die zweite Möglichkeit, mehr über überladene Versionen der Methoden zu erfahren, ist die Dokumentation zu der Methode. Die Dokumentation hilft Ihnen auch, die Bedeutung der einzelnen Parameter genau zu verstehen.

  1. Öffnen Sie zunächst Ihren bevorzugten Webbrowser und Ihre bevorzugte Suchmaschine.

  2. Ausführen einer Suche nach C# Random.Next()

    Ihre Suche sollte den Klassennamen und den Methodennamen enthalten. Möglicherweise möchten Sie auch den Begriff C# verwenden, um sicherzustellen, dass Sie nicht versehentlich Ergebnisse für andere Programmiersprachen erhalten.

  3. Wählen Sie das oberste Suchergebnis aus. Es besteht einer URL, die mit https://learn.microsoft.com beginnt.

    Eines der obersten Suchergebnisse sollte zu einer URL führen, die mit https://learn.microsoft.com beginnt. In diesem Fall sollte der Titel des Links Random.Next Method lauten.

    Hier ist der Link, falls Sie diesen mit einer Suchmaschine nicht direkt finden:

    Random.Next-Methode

  4. Öffnen Sie den Link für C# Random.Next().

  5. Sehen Sie sich kurz die Dokumentation an.

    Scrollen Sie auf der Seite nach unten, um die verschiedenen Codebeispiele anzuzeigen. Beachten Sie, dass Sie die Beispiele im Browserfenster ausführen können.

    Die Dokumentation unter learn.microsoft.com folgt einem Standardformat für jede Klasse und Methode in der .NET-Klassenbibliothek.

  6. Suchen Sie oben auf der Webseite den Abschnitt mit der Bezeichnung Überladungen.

    Beachten Sie, dass drei überladenen Versionen der Methode aufgeführt sind. Jede aufgeführte überladene Version enthält einen Link zu einer Stelle weiter unten auf der Seite.

  7. Um auf der Seite zu einer Beschreibung der zweiten überladenen Version zu navigieren, wählen Sie Next(Int32) aus.

    Die Dokumentation für jede Version der Methode umfasst Folgendes:

    • Kurze Beschreibung der Funktion der Methode
    • Definition der Methode
    • Die von der Methode akzeptierten Parameter
    • Rückgabewerte
    • Auslösbare Ausnahmen
    • Anwendungsbeispiele für die Methode
    • Weitere Hinweise zur Methode
  8. Nehmen Sie sich etwas Zeit, um den abschnitt Parameter zu lesen.

    Im Abschnitt Parameter haben Sie erfahren, dass der Parameter maxValue die „exklusive Obergrenze der Zufallszahl ist, die generiert werden soll“. Eine exklusive Obergrenze bedeutet, dass der Wert 11 übergeben werden muss, wenn die Zahlen nicht größer als 10 sein sollen.

    Außerdem lesen Sie in der nächsten Zeile: „maxValue muss größer als oder gleich 0 sein“. Was geschieht, wenn Sie diese Anweisung ignorieren? Im Abschnitt Ausnahmen ist zu sehen, dass die Methode ArgumentOutOfRangeException zurückgibt, wenn maxValue kleiner als 0 (null) ist.

    Hinweis

    Der Inhalt auf learn.microsoft.com ist die „Wahrheitsinstanz“ für die .NET-Klassenbibliothek. Es ist wichtig, dass Sie sich die Zeit nehmen, die Dokumentation zu lesen. Nur so verstehen Sie letztendlich genau, wie eine bestimmte Methode funktioniert.

Zusammenfassung

  • Methoden können keine Parameter oder mehrere Parameter akzeptieren, je nachdem, wie Sie konzipiert und implementiert wurden. Bei der Übergabe mehrerer Parameter trennen Sie diese durch , Symbol.
  • Methoden können nach der Ausführung ihrer Task einen Wert zurückgeben, oder sie können nichts zurückgeben (Leerzeichen).
  • Überladene Methoden unterstützen mehrere Implementierungen der Methode, von denen jede über eine eindeutige Methodensignatur (die Anzahl der Parameter und den Datentyp der einzelnen Eingabeparameter) verfügt.
  • IntelliSense kann Ihnen helfen, die Codeeingabe zu beschleunigen. Dieses Feature bietet eine Kurzreferenz zu Methoden, ihren Rückgabewerten, ihren überladenen Versionen und den Typen ihrer Parameter.
  • Die Seite „learn.Microsoft.com“ ist die zuverlässigste Datenquelle, wenn Sie erfahren möchten, wie Methoden in der .NET-Klassenbibliothek funktionieren.

Überprüfen Sie Ihr Wissen

1.

Was ist ein Rückgabewert?

2.

Was sind Methodenparameter?

3.

Was ist eine überladene Methode?

4.

Wie hilft IntelliSense Entwickler*innen?