Menu
Coddy logo textTech

Erweiterungsmethoden

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

Erweiterungsmethoden ermöglichen es Ihnen, neue Methoden zu bestehenden Typen hinzuzufügen, ohne deren Quellcode zu ändern oder abgeleitete Klassen zu erstellen. Sie erscheinen so, als wären sie native Methoden des Typs, was Ihren Code lesbarer und intuitiver macht.

Um eine Erweiterungsmethode zu erstellen, definieren Sie 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 können Sie diese Methode direkt auf jedem 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 Sie sentence.WordCount() aufrufen, ü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, wobei Methoden wie Where() und Select() Erweiterungsmethoden für IEnumerable sind. Erweiterungsmethoden sind leistungsstark, um Hilfsfunktionen zu Typen hinzuzufügen, die Sie nicht kontrollieren, wodurch Ihr Code sauber und ausdrucksstark bleibt.

challenge icon

Aufgabe

Einfach

Lassen Sie uns eine Reihe nützlicher Erweiterungsmethoden für Ganzzahlen erstellen, die praktische Funktionen hinzufügen, die man als integriert erwarten würde. Sie werden eine statische Klasse erstellen, die Erweiterungsmethoden enthält, die direkt auf jeder Ganzzahl aufgerufen werden können, wodurch Ihr Code ausdrucksstärker und lesbarer wird.

Sie werden Ihren Code auf zwei Dateien verteilen:

  • IntExtensions.cs: Erstellen Sie eine statische Klasse namens IntExtensions im Namespace Utilities. Diese Klasse wird Erweiterungsmethoden enthalten, die den Typ int erweitern:
    • IsEven() - gibt true zurück, wenn die Zahl gerade ist, andernfalls false
    • Square() - gibt die Zahl mit sich selbst multipliziert zurück
    • IsInRange(int min, int max) - gibt true zurück, wenn die Zahl zwischen min und max liegt (einschließlich), andernfalls false
    Denken Sie 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 Sie erweitern.
  • Program.cs: Lesen Sie in Ihrer Hauptdatei eine Ganzzahl aus der Eingabe ein und demonstrieren Sie alle drei Erweiterungsmethoden. Rufen Sie jede Methode direkt auf der Ganzzahl auf, als wäre sie eine integrierte Methode, und geben Sie dann die Ergebnisse aus.

Sie erhalten drei Eingaben:

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

Geben Sie 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 sind, sollte die Ausgabe wie folgt aussehen:

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

Beachten Sie, wie natürlich Sie number.IsEven() und number.Square() schreiben können – die Erweiterungsmethoden fühlen sich an, als wären sie schon immer Teil des Ganzzahl-Typs gewesen!

Spickzettel

Erweiterungsmethoden ermöglichen es Ihnen, bestehenden Typen neue Methoden hinzuzufügen, ohne deren Quellcode zu ändern. Sie müssen als statische Methoden in einer statischen Klasse definiert werden, wobei dem ersten Parameter das Schlüsselwort this vorangestellt wird.

Grundlegende Syntax für Erweiterungsmethoden:

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

Verwendung:

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

Das Schlüsselwort this vor dem ersten Parameter gibt an, welcher Typ erweitert wird. Der Compiler übersetzt sentence.WordCount() in StringExtensions.WordCount(sentence).

Erweiterungsmethoden mit zusätzlichen Parametern:

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

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

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: Die Erweiterungsmethoden für 'number' verwenden und die Ergebnisse ausgeben
        // number.IsEven(), number.Square() und number.IsInRange(min, max) aufrufen
        // Im folgenden Format ausgeben:
        // Ist {number} gerade? {True/False}
        // Quadrat von {number}: {result}
        // Liegt {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