Vytvoření nové metody pro výčet (Průvodce programováním v C#)

Pomocí rozšiřujících metod můžete přidat funkce specifické pro konkrétní typ výčtu.

Příklad

V následujícím příkladu Grades výčet představuje možné známky dopisu, které student může obdržet ve třídě. Do typu je přidána Grades metoda rozšíření s názvemPassing, takže každá instance tohoto typu nyní "ví", zda představuje známku, nebo ne.

    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.
 */

Všimněte si, že Extensions třída obsahuje také statickou proměnnou, která se dynamicky aktualizuje a že návratová hodnota metody rozšíření odráží aktuální hodnotu této proměnné. To ukazuje, že na pozadí jsou metody rozšíření vyvolány přímo na statické třídě, ve které jsou definovány.

Viz také