Share via


Como: Criar um novo método para uma enumeração (guia de programação translation from VPE for Csharp)

Você pode usar os métodos de extensão para adicionar funcionalidades específicas a um tipo enum particular.

Exemplo

No exemplo a seguir, a Grades enumeração representa as letras possíveis que um aluno pode receber em uma classe. Um método de extensão chamado Passing é adicionado à GradesDigite de forma que cada instância desse tipo agora "sabe" se ele representa uma passagem de nota ou não.

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

Observe que o Extensions classe também contém um estático variável que é correnteizado dinamicamente e que o valor retornado de método de extensão reflete o valor corrente dessa variável. Isso demonstra que, nos bastidores, os métodos de extensão são chamados diretamente na classe estática em que eles são definidos.

Compilando o código

Para executar esse código, copie e cole-o em um projeto de aplicativo console Visual translation from VPE for Csharp que tenha sido criado no Visual Studio. Por padrão, esse projeto destinos versão 3.5 do .NET Framework, e ele tem uma referência a sistema.Core.dll e um using diretiva para sistema.LINQ. Se um ou mais desses requisitos estão faltando o projeto, você pode adicioná-los manualmente.Para obter mais informações, consulte Como: Criar um projeto LINQ.

Consulte também

Conceitos

Guia de Programação C#

Referência

Métodos de extensão (guia de programação translation from VPE for Csharp)