Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt extensiemethoden gebruiken om functionaliteit toe te voegen die specifiek is voor een bepaald enum-type. In het volgende voorbeeld geeft de Grades opsomming de mogelijke cijfers aan die een leerling/student in een klas kan ontvangen. Er wordt een extensiemethode met de naam Passing toegevoegd aan het Grades-type, zodat elk exemplaar van dat type nu kan aangeven of het een voldoende cijfer vertegenwoordigt of niet.
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;
}
U kunt de extensiemethode aanroepen alsof deze is gedeclareerd voor het enum type:
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.
*/
Vanaf C# 14 kunt u extensieleden declareren in een extensieblok. Met de nieuwe syntaxis kunt u extensie-eigenschappen toevoegen. U kunt ook extensieleden toevoegen die nieuwe statische methoden of eigenschappen lijken te zijn. U bent niet langer beperkt tot extensies die exemplaarmethoden lijken te zijn. In het volgende voorbeeld ziet u een extensieblok waarmee een exemplaarextensieeigenschap wordt toegevoegd voor Passingen een statische extensie-eigenschap voor MinimumPassingGrade:
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;
}
}
U roept deze nieuwe extensie-eigenschappen aan alsof ze worden gedeclareerd voor het uitgebreide type:
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.");
Grades.MinimumPassingGrade = Grades.C;
Console.WriteLine($"\r\nRaising the bar. Passing grade is now {Grades.MinimumPassingGrade}!\r\n");
Console.WriteLine($"First {(g1.Passing ? "is" : "is not")} a passing grade.");
Console.WriteLine($"Second {(g2.Passing ? "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.
*/
Meer informatie over de nieuwe extensieleden vindt u in het artikel over extensieleden en in het taalverwijzingsartikel over het extension trefwoord.