Delen via


Een nieuwe methode maken voor een opsomming (C#-programmeerhandleiding)

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.

Zie ook