Menu
Coddy logo textTech

Erweiterungsmethoden

Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy. Lektion 39 von 70.

Erweiterungsmethoden ermöglichen es dir, bestehenden Typen neue Methoden hinzuzufügen, ohne ihren Quellcode zu ändern oder abgeleitete Klassen zu erstellen. Sie wirken, als wären sie native Methoden des Typs, wodurch dein Code lesbarer und intuitiver wird.

Um eine Erweiterungsmethode zu erstellen, definiere eine statische Methode in einer statischen Klasse, wobei dem ersten Parameter das Schlüsselwort this vorangestellt wird:

public static class StringExtensions
{
    public static int WordCount(this string str)
    {
        return str.Split(' ').Length;
    }
}

Jetzt kannst du diese Methode direkt für jeden String aufrufen:

string sentence = "Hello World Today";
int count = sentence.WordCount();  // 3

Der Parameter this string str teilt dem Compiler mit, dass diese Methode den Typ string erweitert. Wenn du sentence.WordCount() aufrufst, übersetzt der Compiler dies im Hintergrund in StringExtensions.WordCount(sentence).

Erweiterungsmethoden können auch zusätzliche Parameter akzeptieren:

public static bool IsLongerThan(this string str, int length)
{
    return str.Length > length;
}

// Verwendung
bool result = "Hello".IsLongerThan(3);  // true

Diese Technik wird in LINQ ausgiebig verwendet, wo Methoden wie Where() und Select() Erweiterungsmethoden für IEnumerable sind. Erweiterungsmethoden sind leistungsstark, um Typen, die du nicht kontrollierst, Hilfsfunktionen hinzuzufügen und deinen Code übersichtlich und ausdrucksstark zu halten.

challenge icon

Aufgabe

Einfach

Erstellen wir eine Reihe nützlicher Erweiterungsmethoden für Ganzzahlen, die praktische Funktionen hinzufügen, die man normalerweise als integriert erwarten würde. Du erstellst eine statische Klasse mit Erweiterungsmethoden, die direkt für jede Ganzzahl aufgerufen werden können, wodurch dein Code ausdrucksstärker und besser lesbar wird.

Du organisierst deinen Code auf zwei Dateien:

  • IntExtensions.cs: Erstelle eine statische Klasse namens IntExtensions im Namespace Utilities. Diese Klasse enthält Erweiterungsmethoden, die den Typ int erweitern:
    • IsEven() – gibt true zurück, wenn die Zahl gerade ist, andernfalls false
    • Square() – gibt die mit sich selbst multiplizierte Zahl zurück
    • IsInRange(int min, int max) – gibt true zurück, wenn die Zahl zwischen min und max liegt (einschließlich), andernfalls false
    Denke daran, dass Erweiterungsmethoden statische Methoden in einer statischen Klasse sein müssen, wobei der erste Parameter das Schlüsselwort this verwendet, um anzugeben, welchen Typ du erweiterst.
  • Program.cs: Lies in deiner Hauptdatei eine Ganzzahl aus der Eingabe ein und führe alle drei Erweiterungsmethoden vor. Rufe jede Methode direkt für die Ganzzahl auf, als wäre sie eine integrierte Methode, und gib anschließend die Ergebnisse aus.

Du erhältst drei Eingaben:

  • Eine zu testende Zahl (Ganzzahl)
  • Minimalwert für die Bereichsprüfung (Ganzzahl)
  • Maximalwert für die Bereichsprüfung (Ganzzahl)

Gib die Ausgabe in diesem Format aus:

Is {number} even? {True/False}
Square of {number}: {result}
Is {number} in range [{min}-{max}]? {True/False}

Wenn die Eingaben beispielsweise 7, 5 und 10 lauten, sollte die Ausgabe wie folgt aussehen:

Is 7 even? False
Square of 7: 49
Is 7 in range [5-10]? True

Beachte, wie natürlich du number.IsEven() und number.Square() schreiben kannst – die Erweiterungsmethoden wirken, als wären sie schon immer Bestandteil des Ganzzahltyps gewesen!

Probier es selbst

using System;
using Utilities;

class Program
{
    public static void Main(string[] args)
    {
        // Eingaben lesen
        int number = Convert.ToInt32(Console.ReadLine());
        int min = Convert.ToInt32(Console.ReadLine());
        int max = Convert.ToInt32(Console.ReadLine());

        // TODO: Verwende die Erweiterungsmethoden auf 'number' und gib die Ergebnisse aus
        // Rufe number.IsEven(), number.Square() und number.IsInRange(min, max) auf
        // Gib im Format aus:
        // Ist {number} gerade? {True/False}
        // Quadrat von {number}: {result}
        // Ist {number} im Bereich [{min}-{max}]? {True/False}

    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C#-Compiler