Methode (Method)

Eine Methode ist ein benannter Codeblock. Du kannst diesen Codeblock aus anderen Programmstellen ausführen, indem du den Methodennamen aufrufst, Daten an die Methode übergeben und von ihr ausgegebene Werte empfangen.

Aufbau einer Methode

Wie bereits erwähnt, ist eine Methode ein Funktionsmitglied einer Klasse.

Grundsätzlich ist eine Methode nichts anderes als eine Funktion. Wenn eine Funktion zu einer Klasse gehört, spricht man von einer Methode. In der C-Sprache werden alle solchen Konstrukte einfach Funktionen genannt.

Jede Methode besteht aus zwei zentralen Bestandteilen: Methodenkopf (Methodendeklaration) und Methodenrumpf.

  1. Methodenkopf: Er legt alle Eigenschaften der Methode fest und enthält folgende Angaben:
    • Ob die Methode einen Rückgabewert liefert; falls ja, muss der Rückgabetyp angegeben werden
    • Der Name der Methode
    • Die übergebbaren Datentypen sowie Regeln zur Datenverarbeitung
  2. Methodenrumpf: Er besteht aus einer Sequenz ausführbarer Anweisungen. Die Ausführung beginnt mit der ersten Anweisung im Rumpf und läuft nacheinander ab.

Schauen wir uns ein Beispiel an

    string Introduce(string name,int age)
    {
        string words = $"hello my name is {name},i'm {age} years old";
        Console.WriteLine(words);
        return words;
    }Code-Sprache: C# (cs)

Methodenkopf: string Introduce(string name,int age)

  • string : Rückgabetyp, also Zeichenkette
  • Introduce: Methodenname
  • (string name,int age): Parameterliste. Diese beiden Einträge sind Variablen, die Namen und Alter von außen entgegennehmen und innerhalb des Methodenrumpfs verwendet werden können.
Die Abbildung oben erläutert alle Teile einer Methode

Wie ruft man diese Methode auf?

Diese Methode gehört zur Klasse Program und befindet sich gemeinsam mit der Main-Methode in derselben Klasse. Main ist jedoch eine statische Methode. Statische Methoden können nicht direkt nicht-statische Methoden aufrufen. Um Introduce aufzurufen, musst du zuerst eine Instanz von Program erstellen und die Methode über diese Instanz aufrufen.

class Program
{
    static void Main()
    {
        Program program = new Program();
        program.Introduce("John", 30);
    }

    string Introduce(string name,int age)
    {
        string words = $"hello my name is {name},i'm {age} years old";
        Console.WriteLine(words);
        return words;
    }
}Code-Sprache: C# (cs)

Ein direkter Aufruf wie unten führt zu einem Kompilierfehler

Der korrekte Weg: Erstelle innerhalb der Main-Funktion mit new eine Program-Instanz und rufe anschließend Introduce über diese Instanz auf

Program program = new Program();//√
program.Introduce("John", 30);Code-Sprache: C# (cs)

Methodenrumpf

Ein Methodenrumpf kann null oder mehrere ausführbare Anweisungen enthalten.

Der Methodenrumpf ist ein Codeblock (eine Gruppe von Anweisungen in geschweiften Klammern). Innerhalb eines Codeblocks lassen sich folgende Elemente unterbringen:

  • Lokale Variablen
  • Kontrollstrukturen (Schleifen, Verzweigungen usw.)
  • Aufrufe anderer Methoden
  • Verschachtelte Untercodeblöcke
  • Lokale Funktionen (Untermethoden innerhalb einer Methode) [späterer Lerninhalt]
class Program
{
    static void Main()
    {
        int age = 3; // Lokale Variable, Initialwert 3
        while (age > 0) // Kontrollstruktur
        {
            --age;
            Introduce("Tom", age); // Methodenaufruf
        }

        {
            //Verschachtelter Untercodeblock
        }
    }

    static string Introduce(string name,int age)
    {
        string words = $"hello my name is {name},i'm {age} years old";
        Console.WriteLine(words);
        return words;
    }
}
Code-Sprache: JavaScript (javascript)

In diesem Codebeispiel wurde der Funktion Introduce das Schlüsselwort static vorangestellt, wodurch sie zu einer statischen Funktion wird. Dann kannst du sie direkt in Main aufrufen, ohne vorher eine Instanz anzulegen.


Lokale Variablen (Local Variables)

Wie die bereits vorgestellten Instanzfelder dienen lokale Variablen zum Speichern von Daten. Instanzfelder speichern üblicherweise den Zustand eines Objekts, lokale Variablen hingegen nur temporäre Daten für einzelne Berechnungen.

Sobald die Methode, zu der lokale Variablen gehören, die Ausführung beendet, werden diese Variablen vom Stack entfernt. Werttyp-Variablen werden sofort vernichtet; Referenztyp-Variablen werden zu einem späteren Zeitpunkt vom Garbage Collector beseitigt.

1. Syntax zur Deklaration lokaler Variablen
Typ Variablenname = Initialwert;
  • Variablenname: Selbst definierter Bezeichner
  • = Initialwert: Optionaler Initialisierer zum Zuweisen eines Startwerts

2. Grundregeln lokaler Variablen

  1. Lebensdauer und Gültigkeitsbereich: Existieren nur innerhalb des Blocks, in dem sie deklariert wurden, sowie in allen darin verschachtelten Unterblöcken
    • Die Variable entsteht und wird gültig ab der Zeile ihrer Deklaration
    • Nach Abschluss des Codeblocks wird die Variable ungültig und gelöscht
  2. Freie Deklarationsposition: Kann überall im Methodenrumpf platziert werden, muss aber vor der Nutzung deklariert werden
    static void Main()
    {
        int age = 3; //Lokale Variable
        Phone p = new Phone(); //Lokale Variable eines benutzerdefinierten Typs

        {
            int one = 1; //Lokale Variable im Untercodeblock
            bool two = false;
        }

        double d = 0;
    }Code-Sprache: JavaScript (javascript)
Nach Ausführung des verschachtelten Unterblocks werden die lokalen Variablen one und two vom Stack entfernt und vernichtet

Instanzfelder vs Lokale Variablen

InstanzfeldLokale Variable
LebensdauerWird bei Erstellen einer Objektinstanz angelegt;
vernichtet, wenn das Objekt nicht mehr erreichbar ist
Wird ab der Deklarationszeile aktiv;
vernichtet nach Ausführung des zugehörigen Codeblocks
StandardinitialisierungDer Compiler weist automatisch den Standardwert des jeweiligen Typs zuKeine automatische Initialisierung;
Nutzung ohne Wertzuweisung führt zu Kompilierfehler
SpeicherortLiegt vollständig auf dem Heap,
unabhängig von Werttyp oder Referenztyp
Werttyp: Stack;
Referenztyp: Referenz auf Stack, Objektdaten auf Heap

Methode (Method)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert