Übung: Aufrufen der Methoden einer .NET-Klasse

Abgeschlossen

Ob Sie es gemerkt haben oder nicht: Seit Ihrer ersten „Hello, World!“-Anwendung haben Sie schon C#-Methoden aufgerufen. Diese Anwendung verwendet die WriteLine()-Methode der Console-Klasse, um die Nachricht „Hello, World!“ anzuzeigen.

Nicht alle Klassen und Methoden sind aber auf dieselbe Weise implementiert. In dieser Lerneinheit werden einige der häufigsten Varianten abgedeckt, die Sie bei der Verwendung von Methoden aus der .NET-Klassenbibliothek kennen sollten. Aber noch wichtiger ist, dass Sie lernen, wie Sie in der Dokumentation suchen und diese nutzen, um mehr über eine Methode zu erfahren.

Aufrufen von Methoden in der .NET-Klassenbibliothek

Aus Ihren bisherigen Erfahrungen mit der Console.WriteLine()-Methode sollten Sie mit den Grundlagen bereits vertraut sein:

  • Geben Sie als ersten Schritt den Klassennamen ein. In diesem Fall lautet der Klassenname Console.
  • Hinzufügen des Operators für den Memberzugriff (.-Symbol)
  • Fügen Sie den Methodennamen hinzu. In diesem Fall lautet der Methodenname WriteLine.
  • Hinzufügen des Operators für den Methodenaufruf, der aus Klammern (()) besteht
  • Geben Sie schließlich die Argumente an, die an die Methode übergeben werden, falls vorhanden, und zwar in den Klammern des Methodenaufrufoperators. In diesem Fall geben Sie den Text an, der von der Console.WriteLine()-Methode in die Konsole geschrieben werden soll (z. B. "Hello World!").

Je nachdem, wie die Entwickler die jeweilige Methode aufgebaut und implementiert haben, sind ggf. auch diese Schritte erforderlich:

  • Übergeben zusätzlicher Werte als Eingabeparameter
  • Akzeptieren eines Rückgabewerts

In der nächsten Lerneinheit untersuchen Sie, wie Eingabewerte an eine Methode übergeben werden und wie eine Methode verwendet wird, um einen Wert an die aufrufende Routine zurückzugeben.

Während einige Methoden genauso wie Console.WriteLine() aufgerufen werden können, gibt es andere Methoden in der .NET-Klassenbibliothek, bei denen anders vorgegangen werden muss.

Vorbereiten Ihrer Programmierumgebung

Dieses Modul enthält Programmieraktivitäten zum Erstellen und Ausführen von Beispielcode. Es wird empfohlen, diese Aktivitäten mit Visual Studio Code als Entwicklungsumgebung durchzuführen. Die Verwendung von Visual Studio Code für diese Aktivitäten vereinfacht das Schreiben und Ausführen von Code in einer Entwicklerumgebung, die von Expert*innen weltweit verwendet wird.

  1. Öffnen Sie Visual Studio Code.

    Sie können das Windows-Startmenü (oder eine entsprechende Ressource für ein anderes Betriebssystem) verwenden, um Visual Studio Code zu öffnen.

  2. Klicken Sie im Visual Studio Code-Menü Datei auf Ordner öffnen.

  3. Navigieren Sie im Dialogfeld Ordner öffnen zum Windows-Ordner Desktop.

    Wenn Sie Codeprojekte in der Regel in einem anderen Ordner speichern, können Sie stattdessen auch diesen verwenden. Für dieses Training ist es wichtig, einen Ort zu haben, den Sie leicht finden und sich gut merken können.

  4. Klicken Sie im Dialogfeld Ordner öffnen auf Ordner auswählen.

    Wenn ein Sicherheitsdialogfeld angezeigt wird, in dem Sie gefragt werden, ob Sie den Autor*innen vertrauen, wählen Sie Ja aus.

  5. Klicken Sie im Visual Studio Code-Menü Terminal die Option Neues Terminal aus.

    Beachten Sie, dass eine Eingabeaufforderung im Panel „Terminal“ den Ordnerpfad für den aktuellen Ordner anzeigt. Beispiel:

    C:\Users\someuser\Desktop>
    

    Hinweis

    Wenn Sie auf Ihrem eigenen PC und nicht in einer Sandbox oder gehosteten Umgebung arbeiten und schon andere Microsoft Learn-Module in dieser C#-Reihe absolviert haben, haben Sie vielleicht bereits einen Projektordner für Codebeispiele erstellt. In diesem Fall können Sie den nächsten Schritt überspringen, in dem eine Konsolen-App im Ordner „TestProject“ erstellt wird.

  6. Geben Sie an der Terminal-Eingabeaufforderung dotnet new console -o ./CsharpProjects/TestProject ein, um eine neue Konsolenanwendung in einem angegebenen Ordner zu erstellen, und drücken Sie dann die EINGABETASTE.

    Dieser .NET-CLI-Befehl verwendet eine .NET-Programmvorlage, um ein neues C#-Konsolenanwendungsprojekt am angegebenen Ordnerspeicherort zu erstellen. Der Befehl erstellt die Ordner „CsharpProjects“ und „TestProject“ für Sie und verwendet „TestProject“ als Namen für Ihre .csproj-Datei.

  7. Erweitern Sie im Panel „Explorer“ den Ordner CsharpProjects.

    Nun sollten der Ordner TestProject und zwei Dateien (eine C#-Programmdatei namens Program.cs und eine C#-Projektdatei namens TestProject.csproj) angezeigt werden.

  8. Wählen Sie im Panel „Explorer“ Program.cs aus, um Ihre Codedatei im Editor-Panel anzuzeigen.

  9. Löschen Sie die vorhandenen Codezeilen.

    Sie verwenden dieses C#-Konsolenprojekt zum Erstellen und Ausführen von Codebeispielen im Rahmen dieses Moduls.

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

Aufrufen unterschiedlicher Arten von Methoden in der .NET-Klassenbibliothek

  1. Geben Sie im Visual Studio Code-Editor den folgenden Code ein, um ein Codebeispiel zu erstellen, das Methoden der System.Random- und System.Console-Klasse implementiert:

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

    Dieser Code simuliert einen Würfelwurf mithilfe der Random.Next()-Methode zum Generieren einer Zahl und der Console.WriteLine()-Methode zum Anzeigen des Werts.

    Hinweis

    Sie werden den Code später in dieser Lerneinheit ausführlich untersuchen.

  2. Wählen Sie im Visual Studio Code-Menü Datei die Option Speichern aus.

  3. 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.

    Der Terminalbereich enthält eine Eingabeaufforderung, die einen Ordnerpfad anzeigt. Zum Beispiel:

    C:\Users\someuser\Desktop\CsharpProjects\TestProject>

    Wenn Sie das Terminal zum Ausführen von .NET-CLI-Befehlen verwenden, werden die Befehle in diesem Ordner ausgeführt. Stellen Sie sicher, dass Ihr Codeordner mit dem Ordnerpfad übereinstimmt, der in der Eingabeaufforderung angezeigt wird, bevor Sie Ihren Code erstellen oder ausführen.

  4. Geben Sie an der Eingabeaufforderung des Terminals den Befehl dotnet run ein, und drücken Sie dann die EINGABETASTE.

    In der Konsolenausgabe wird jetzt eine Zahl von 1 bis 6 angezeigt (die Anzahl der Würfelaugen). Wenn Sie den Code ausreichend häufig ausführen, sehen Sie nach und nach jede der Zahlen.

  5. Nehmen Sie sich eine Minute Zeit, um die Syntax zu untersuchen, die für den Zugriff auf die Next()- und WriteLine()-Methode verwendet wird.

    Sie nutzen verschiedene Techniken für den Zugriff auf die Methoden.

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

    In der dritten Codezeile fügen Sie einen Verweis auf die Console-Klasse ein und rufen die Console.WriteLine()-Methode direkt auf. Sie verwenden jedoch eine andere Technik zum Aufrufen der Random.Next()-Methode. Der Grund für die Verwendung unterschiedlicher Methoden liegt darin, dass manche Methoden zustandsbehaftet und andere wiederum zustandslos sind. Ihr nächster Schritt besteht darin, den Unterschied zwischen zustandsbehafteten und zustandslosen Methoden zu untersuchen.

Zustandslose im Vergleich zu zustandsbehafteten Methoden

In Softwareentwicklungsprojekten wird der Begriff Zustand verwendet, um den Zustand der Ausführungsumgebung zu einem bestimmten Zeitpunkt zu beschreiben. Während der Code Zeile für Zeile ausgeführt wird, werden die Werte in Variablen gespeichert. Zu einem beliebigen Zeitpunkt während der Ausführung ist der aktuelle Zustand der Anwendung die Sammlung aller im Speicher vorhandenen Werte.

Einige Methoden sind jedoch nicht vom aktuellen Zustand der Anwendung abhängig, um ordnungsgemäß zu funktionieren. Das heißt, dass zustandslose Methoden implementiert werden, sodass sie ohne Verweise auf oder Änderungen von Werten funktionieren können, die bereits im Speicher vorhanden sind. Zustandslose Methoden werden auch als statische Methoden bezeichnet.

Beispielsweise hängt die Console.WriteLine()-Methode nicht von irgendwelchen Werten ab, die sich im Speicher befinden. Sie erfüllt ihre Funktion und wird beendet, ohne dadurch den Zustand der Anwendung zu beeinträchtigen.

Andere Methoden müssen jedoch Zugriff auf den Zustand der Anwendung haben, damit sie ordnungsgemäß funktionieren. Mit anderen Worten: Zustandsbehaftete Methoden nutzen Werte, die von zuvor ausgeführten Codezeilen im Arbeitsspeicher abgelegt wurden. Oder sie ändern den Zustand der Anwendung, indem sie Werte aktualisieren oder neue Werte speichern. Sie werden auch als Instanzmethoden bezeichnet.

Zustandsbehaftete Methoden (Instanzmethoden) verfolgen ihren Zustand in Feldern, bei denen es sich um Variablen handelt, die in der Klasse definiert sind. Jede neue Instanz der Klasse erhält eine eigene Kopie dieser Felder, um darin den Zustand zu speichern.

Eine einzelne Klasse kann sowohl zustandsbehaftete als auch zustandslose Methoden unterstützen. Um jedoch zustandsbehaftete Methoden aufzurufen, müssen Sie zunächst eine Instanz der Klasse erstellen, damit die Methode auf den Zustand zugreifen kann.

Erstellen einer Instanz von einer Klasse

Eine Instanz einer Klasse wird Objekt genannt. Zum Erstellen einer neuen Instanz einer Klasse verwenden Sie den new-Operator. Sehen Sie sich die folgende Codezeile an, mit der eine neue Instanz der Random-Klasse erzeugt wird, um ein neues Objekt namens dice zu erstellen:

Random dice = new Random();

Der new-Operator führt verschiedene wichtige Aktionen aus:

  • Zuerst wird eine Adresse im Arbeitsspeicher des Computers angefordert, der groß genug ist, um ein neues Objekt auf der Grundlage der Random-Klasse zu speichern.
  • Er erstellt ein neues Objekt und speichert es unter der Speicheradresse.
  • Er gibt die Speicheradresse zurück, sodass sie in der Variablen dice gespeichert werden kann.

Sobald ein Verweis zur dice-Variablen erstellt wurde, führt die .NET-Runtime eine Suche im Hintergrund aus, sodass Sie den Eindruck haben, direkt mit dem Objekt zu arbeiten.

Mit der neuesten Version der .NET-Runtime können Sie ein Objekt instanziieren, ohne den Typnamen (zieltypisierter Konstruktoraufruf) wiederholen zu müssen. Der folgende Code wird beispielsweise eine neue Instanz der Random-Klasse erstellen:

Random dice = new();

Die Absicht besteht darin, die Lesbarkeit des Codes zu vereinfachen. Beim Schreiben eines zieltypisierten new-Ausdrucks verwenden Sie immer Klammern.

Warum ist die Next()-Methode zustandsbehaftet?

Vielleicht fragen Sie sich, warum die Next()-Methode als zustandsbehaftete Methode implementiert wurde? Konnten die Entwickler der .NET-Klassenbibliothek nicht herausfinden, wie eine Zufallszahl generiert werden kann, ohne dass dafür ein Zustand benötigt wird? Und was genau wird von der Next()-Methode gespeichert oder referenziert?

Das sind wirklich gute Fragen. Computer sind im Allgemeinen gut darin, spezifischen Anweisungen zu folgen, um ein zuverlässiges und wiederholbares Ergebnis zu erzielen. Damit die Illusion von Zufälligkeit entsteht, beschlossen die Entwickler der Next()-Methode, Datum und Uhrzeit bis auf den Bruchteil einer Millisekunde zu erfassen und damit einen Startwert für einen Algorithmus zu setzen, der jedes Mal eine andere Zahl erzeugt. Obwohl sie nicht ganz zufällig ist, ist dieses Verfahren für die meisten Anwendungen ausreichend. Der Zustand, der während der Lebensdauer des dice-Objekts erfasst und aufrechterhalten wird, ist der Startwert. Bei allen nachfolgenden Aufrufen der Next()-Methode wird der Algorithmus erneut ausgeführt, wobei sich jedoch der Startwert jedes Mal ändert, sodass nicht (unbedingt) derselbe Wert zurückgegeben wird.

Wenn Sie die Random.Next()-Methode verwenden möchten, müssen Sie ihre Funktionsweise kennen. Sie müssen wissen, dass Sie bei einigen Methoden eine Instanz einer Klasse erstellen müssen, bevor Sie sie aufrufen, während dies bei anderen nicht der Fall ist.

Wie können Sie feststellen, ob Sie eine Instanz einer Klasse erstellen müssen, bevor Sie deren Methoden aufrufen?

Um herauszufinden, ob eine Methode zustandsbehaftet oder zustandslos ist, können Sie in der Dokumentation nachsehen. Darin finden Sie Beispiele, die zeigen, ob die Methode über die Objektinstanz oder direkt über die Klasse aufgerufen werden muss.

Hinweis

Manchmal müssen Sie auf der Dokumentationsseite nach unten scrollen, um die Codebeispiele zu finden.

Alternativ zum Durchsuchen der Produktdokumentation können Sie versuchen, direkt über die Klasse auf die Methode zuzugreifen. Wenn es funktioniert, wissen Sie, dass es sich um eine zustandslose Methode handelt. Schlimmstenfalls wird dadurch ein Kompilierungsfehler angezeigt.

Versuchen Sie, direkt auf die Random.Next()-Methode zuzugreifen, und beobachten Sie, was passiert.

  1. Geben Sie die folgende Codezeile in den Visual Studio Code-Editor ein:

    int result = Random.Next();
    
    

    Sie wissen bereits, dass es sich bei Next() um eine zustandsbehaftete Methode handelt. In diesem Beispiel wird veranschaulicht, wie der Visual Studio Code-Editor reagiert, wenn Sie nicht richtig auf eine Methode zugreifen.

  2. Beachten Sie, dass unter Random.Next eine rote Wellenlinie angezeigt wird, die angibt, dass ein Kompilierungsfehler vorliegt.

    Wenn die Methode, die Sie verwenden möchten, zustandslos ist, wird keine rote Wellenlinie angezeigt.

  3. Zeigen Sie mit dem Mauszeiger auf die rote Wellenlinie.

    Ein Popupfenster sollte mit der folgenden Nachricht angezeigt werden:

    (1,14): error CS0120: An object reference is required for the non-static field, method, or property 'Random.Next()'
    
    

    Wie Sie im Code am Anfang der Lerneinheit gesehen haben, können Sie diesen Fehler beheben, indem Sie vor dem Zugriff auf die Next()-Methode eine Instanz der Random-Klasse erstellen. Zum Beispiel:

    Random dice = new Random();
    int roll = dice.Next();
    
    

    In diesem Fall wird die Next()-Methode ohne Eingabeparameter aufgerufen.

Zusammenfassung

  • Zum Aufrufen von Methoden einer Klasse in der .NET-Klassenbibliothek verwenden Sie das Format ClassName.MethodName(), wobei das .-Zeichen der Operator für den Memberzugriff ist. Dieses ist erforderlich, um auf eine Methode zuzugreifen, die für die Klasse definiert ist. Die ()-Symbole sind die Operatoren für den Methodenaufruf.
  • Beim Aufrufen einer zustandslosen Methode müssen Sie vorher keine neue Instanz der Klasse erstellen.
  • Wenn Sie jedoch eine zustandsbehaftete Methode aufrufen, müssen Sie eine Instanz der Klasse erstellen und auf die Methode über das Objekt zugreifen.
  • Verwenden Sie den new-Operator, um eine neue Instanz einer Klasse zu erstellen.
  • Eine Instanz einer Klasse wird Objekt genannt.

Überprüfen Sie Ihr Wissen

1.

Was ist die richtige Methode zum Erstellen einer Klasse?

2.

Ein*e Entwickler*in erstellt eine Instanz der Random-Klasse namens coins. Welche der folgenden Codezeilen kann verwendet werden, um die Next()-Methode aufzurufen?