Практическое руководство. Создание нового метода для перечисления (Руководство по программированию в C#)

Методы расширения можно использовать для добавления функций, соответствующих определенному типу перечисления.

Пример

В следующем примере перечисление Grades представляет возможные буквенные оценки, которые учащийся может получить в классе. Метод расширения Passing добавлен к типу Grades, чтобы каждый экземпляр этого типа теперь "знал", представляет ли он проходную оценку или нет.

using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

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

Обратите внимание, что класс Extensions также содержит статическую переменную, которая обновляется динамически, и что возвращаемое значение метода расширения отражает текущее значение этой переменной. Это показывает, что система напрямую вызывает методы расширения в статическом классе, в котором они определяются.

Компиляция кода

Для выполнения этого кода скопируйте его в проект консольного приложения на языке Visual C#, которое было создано в среде разработки Visual Studio. По умолчанию этот проект предназначен для версии 3.5 платформы .NET Framework и имеет ссылку на библиотеку System.Core.dll и директиву using для пространства имен System.Linq. Если одно или более требований в проекте отсутствуют, их можно добавить вручную. Дополнительные сведения см. в разделе Практическое руководство. Создание проекта LINQ.

См. также

Ссылки

Методы расширения (Руководство по программированию в C#)

Основные понятия

Руководство по программированию на C#