Como: criar um novo método para uma enumeração (guia de programação do C#)
Você pode usar os métodos de extensão para adicionar funcionalidade específica a um tipo específico de enum.
Exemplo
No exemplo a seguir, o Grades enumeração representa as letras possíveis que um aluno pode ser exibida em uma classe.Um método de extensão chamado Passing é adicionado para o Grades digite 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 uma variável estática que é atualizada dinamicamente e que o valor de retorno do método de extensão reflete o valor atual 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 Visual C# projeto de aplicativo console que tenha sido criado em Visual Studio.Por padrão, esse projeto destina-se a versão 3.5 da .NET Framework, e ele tem uma referência a System.Core.dll e um using diretriz para System. LINQ.Se um ou mais desses requisitos estão ausentes do projeto, você pode adicioná-los manualmente.Para obter mais informações, consulte Como: criar um projeto LINQ.
Consulte também
Referência
Métodos de extensão (guia de programação do C#)