Porady: utworzenie nowej metody wyliczania (Przewodnik programowania w języku C#)

Aby dodać funkcje specyficzne do wyliczenia określonego typu, można użyć metody rozszerzenie.

Przykład

W poniższym przykładzie Grades wyliczenie reprezentuje możliwe litery ocen, które student może pojawić się w klasie.Metoda rozszerzenie o nazwie Passing dodaje się do Grades należy wpisać tak, aby każde wystąpienie tego typu teraz "wie" czy reprezentuje on klasy mijania, lub nie.

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

Należy zauważyć, że Extensions klasy zawiera także zmiennej statycznej, która jest aktualizowana dynamicznie, i że wartość zwracana przez metodę rozszerzenia odzwierciedla bieżącą wartość tej zmiennej.Pokazuje to, że za kulisami, rozszerzenie metody są wywoływane bezpośrednio na statyczne klasy, w której są zdefiniowane.

Kompilowanie kodu

Aby uruchomić ten kod, skopiuj i wklej go do programu Visual C# konsoli aplikacji projekt utworzony w Visual Studio.Domyślnie ten projekt jest przeznaczony dla wersji 3.5 .NET Framework, i odniesienie do System.Core.dll i using dla System.Linq w dyrektywie.Brakuje jednego lub więcej z tych wymagań z projektu, można dodać je ręcznie.Aby uzyskać więcej informacji, zobacz Porady: tworzenie projektu LINQ.

Zobacz też

Informacje

Metody rozszerzeń (Przewodnik programowania w języku C#)

Koncepcje

Przewodnik programowania w języku C#