Share 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.

Opmerking

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 weet of het een doorgegeven cijfer vertegenwoordigt of niet.

using System;

namespace EnumExtension
{
    // Define an extension method in a non-nested static class.
    public static class Extensions
    {
        public static Grades minPassing = Grades.D;
        public static bool Passing(this Grades grade)
        {
            return grade >= minPassing;
        }
    }

    public enum Grades { F = 0, D=1, C=2, B=3, A=4 };
    class Program
    {
        static void Main(string[] args)
        {
            Grades g1 = Grades.D;
            Grades g2 = Grades.F;
            Console.WriteLine("First {0} a passing grade.", g1.Passing() ? "is" : "is not");
            Console.WriteLine("Second {0} a passing grade.", g2.Passing() ? "is" : "is not");

            Extensions.minPassing = Grades.C;
            Console.WriteLine("\r\nRaising the bar!\r\n");
            Console.WriteLine("First {0} a passing grade.", g1.Passing() ? "is" : "is not");
            Console.WriteLine("Second {0} a passing grade.", g2.Passing() ? "is" : "is not");
        }
        /* 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.
        */
    }
}

Houd er rekening mee dat de Extensions klasse ook een statische variabele bevat die dynamisch wordt bijgewerkt en dat de retourwaarde van de extensiemethode de huidige waarde van die variabele weergeeft. Dit laat zien dat extensiemethoden achter de schermen rechtstreeks worden aangeroepen op de statische klasse waarin ze zijn gedefinieerd.

Zie ook