Cómo: Crear un método nuevo para una enumeración (Guía de programación de C#)

Actualización: noviembre 2007

Puede utilizar métodos de extensión para agregar funcionalidad específica a un tipo de enumeración concreto.

Ejemplo

En el ejemplo siguiente, la enumeración Grades representa las posibles calificaciones con letras que un alumno puede recibir en una clase. Un método de extensión denominado Passing se agrega al tipo Grades para que cada instancia de ese tipo "sepa" si representa una calificación de aprobado o no.

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 la clase Extensions también contiene una variable estática que se actualiza dinámicamente y que el valor devuelto del método de extensión refleja el valor actual de dicha variable. Esto demuestra que, en segundo plano, los métodos de extensión se invocan directamente en la clase estática en la que se definen.

Compilar el código

Para ejecutar este código, debe copiarlo y pegarlo en un proyecto de aplicación de consola de Visual C# creado en Visual Studio. De manera predeterminada, el proyecto tiene como destino la versión 3.5 de .NET Framework y contiene una referencia a System.Core.dll y una directiva using para System.Linq. Si el proyecto no cumple uno o varios de estos requisitos, puede agregar lo que falte manualmente. Para obtener más información, consulte Cómo: Crear un proyecto con LINQ.

Vea también

Conceptos

Guía de programación de C#

Referencia

Métodos de extensión (Guía de programación de C#)