Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können Erweiterungsmethoden verwenden, um einem bestimmten Enumerationstyp spezifische Funktionen hinzuzufügen. Im folgenden Beispiel stellt die Grades
-Enumeration die möglichen Noten in Buchstaben dar, die ein Schüler im Unterricht erhalten kann. Eine Erweiterungsmethode mit dem Namen Passing
wird dem Grades
-Typ hinzugefügt, sodass jede Instanz dieses Typs nun „weiß“, ob sie eine Note darstellt, mit der der Schüler bestanden hat.
public enum Grades
{
F = 0,
D = 1,
C = 2,
B = 3,
A = 4
};
// Define an extension method in a non-nested static class.
public static class Extensions
{
public static bool Passing(this Grades grade, Grades minPassing = Grades.D) =>
grade >= minPassing;
}
Sie können die Erweiterungsmethode aufrufen, als ob sie für den enum
Typ deklariert wurde:
Grades g1 = Grades.D;
Grades g2 = Grades.F;
Console.WriteLine($"First {(g1.Passing() ? "is" : "is not")} a passing grade.");
Console.WriteLine($"Second {(g2.Passing() ? "is" : "is not")} a passing grade.");
Console.WriteLine("\r\nRaising the bar!\r\n");
Console.WriteLine($"First {(g1.Passing(Grades.C) ? "is" : "is not")} a passing grade.");
Console.WriteLine($"Second {(g2.Passing(Grades.C) ? "is" : "is not")} a passing grade.");
/* Output:
First is a passing grade.
Second is not a passing grade.
Raising the bar!
First is not a passing grade.
Second is not a passing grade.
*/
Ab C# 14 können Sie Erweiterungsmitglieder in einem Erweiterungsblock deklarieren. Mit der neuen Syntax können Sie Erweiterungseigenschaften hinzufügen. Sie können auch Erweiterungselemente hinzufügen, die scheinbar neue statische Methoden oder Eigenschaften sind. Sie sind nicht mehr auf Erweiterungen beschränkt, die scheinbar Instanzmethoden sind. Das folgende Beispiel zeigt einen Erweiterungsblock, der eine Instanzerweiterungseigenschaft für Passing
und eine statische Erweiterungseigenschaft für MinimumPassingGrade
hinzufügt.
public static class EnumExtensions
{
private static Grades minimumPassingGrade = Grades.D;
extension(Grades grade)
{
public static Grades MinimumPassingGrade
{
get => minimumPassingGrade;
set => minimumPassingGrade = value;
}
public bool Passing => grade >= minimumPassingGrade;
}
}
Sie rufen diese neuen Erweiterungseigenschaften so auf, als ob sie für den erweiterten Typ deklariert sind:
public static class EnumExtensions
{
private static Grades minimumPassingGrade = Grades.D;
extension(Grades grade)
{
public static Grades MinimumPassingGrade
{
get => minimumPassingGrade;
set => minimumPassingGrade = value;
}
public bool Passing => grade >= minimumPassingGrade;
}
}
Weitere Informationen zu den neuen Erweiterungsmitgliedern finden Sie im Artikel zu Erweiterungsmitgliedern und im Sprachreferenzartikel zum Schlüsselwort "Extension".