Procedura: creare un nuovo metodo per una enumerazione (Guida per programmatori C#)
È possibile utilizzare i metodi di estensione per aggiungere la funzionalità specifica a un particolare tipo enum.
Esempio
Nell'esempio seguente, l'enumerazione Grades rappresenta, il possibile voto che un studente potrebbe prendere in una classe. Un metodo di estensione denominato Passing viene aggiunto al tipo Grades in modo che ogni istanza di tale tipo ora "sa" se rappresenta un voto sufficiente oppure 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.
*/
Si noti che la classe Extensions contiene anche una variabile statica aggiornata in modo dinamico e che il valore restituito del metodo di estensione riflette il valore corrente di tale variabile. Ciò dimostra che, in background, i metodi di estensione vengono richiamati direttamente sulla classe statica nella quale sono definiti.
Compilazione del codice
Per eseguire questo codice, copiarlo e incollarlo in un progetto di applicazione console di Visual C# creato in Visual Studio. Per impostazione predefinita, questo progetto è destinato alla versione 3.5 di .NET Framework e contiene un riferimento a System.Core.dll e una direttiva using per System.Linq. Se uno o più di questi requisiti non sono presenti nel progetto, è possibile aggiungerli manualmente. Per ulteriori informazioni, vedere Procedura: creare un progetto LINQ.
Vedere anche
Riferimenti
Metodi di estensione (Guida per programmatori C#)