Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Vous pouvez utiliser des méthodes d’extension pour ajouter des fonctionnalités spécifiques à un type d’énumération particulier. Dans l’exemple suivant, l’énumération Grades
représente les notes de lettres possibles qu’un étudiant peut recevoir dans une classe. Une méthode d’extension nommée Passing
est ajoutée au type Grades
afin que chaque instance de ce type « sache » maintenant s’il représente une note de passage ou non.
public enum Grades
{
F = 0,
D = 1,
C = 2,
B = 3,
A = 4
};
// Define an extension method in a non-nested static class.
public static class Extensions
{
public static bool Passing(this Grades grade, Grades minPassing = Grades.D) =>
grade >= minPassing;
}
Vous pouvez appeler la méthode d’extension comme si elle a été déclarée sur le enum
type :
Grades g1 = Grades.D;
Grades g2 = Grades.F;
Console.WriteLine($"First {(g1.Passing() ? "is" : "is not")} a passing grade.");
Console.WriteLine($"Second {(g2.Passing() ? "is" : "is not")} a passing grade.");
Console.WriteLine("\r\nRaising the bar!\r\n");
Console.WriteLine($"First {(g1.Passing(Grades.C) ? "is" : "is not")} a passing grade.");
Console.WriteLine($"Second {(g2.Passing(Grades.C) ? "is" : "is not")} a passing grade.");
/* 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.
*/
À compter de C# 14, vous pouvez déclarer des membres d’extension dans un bloc d’extension. La nouvelle syntaxe vous permet d’ajouter des propriétés d’extension. Vous pouvez également ajouter des membres d’extension qui semblent être de nouvelles méthodes ou propriétés statiques. Vous n’êtes plus limité aux extensions qui semblent être des méthodes d’instance. L’exemple suivant montre un bloc d’extension qui ajoute une propriété d’extension d’instance pour Passing
, et une propriété d’extension statique pour MinimumPassingGrade
:
public static class EnumExtensions
{
private static Grades minimumPassingGrade = Grades.D;
extension(Grades grade)
{
public static Grades MinimumPassingGrade
{
get => minimumPassingGrade;
set => minimumPassingGrade = value;
}
public bool Passing => grade >= minimumPassingGrade;
}
}
Vous appelez ces nouvelles propriétés d'extension comme si elles étaient déclarées sur le type étendu :
public static class EnumExtensions
{
private static Grades minimumPassingGrade = Grades.D;
extension(Grades grade)
{
public static Grades MinimumPassingGrade
{
get => minimumPassingGrade;
set => minimumPassingGrade = value;
}
public bool Passing => grade >= minimumPassingGrade;
}
}
Vous pouvez en savoir plus sur les nouveaux membres de l’extension dans l’article sur les membres de l’extension et dans l’article de référence sur le mot clé « extension ».