Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pomocí rozšiřujících metod můžete přidat funkce specifické pro konkrétní typ výčtu. V následujícím příkladu Grades výčet představuje možné známky dopisu, které student může obdržet ve třídě. Do typu Passing je přidána metoda rozšíření s názvem Grades, takže nyní každá instance tohoto typu "ví", zda představuje známku prospěchu, nebo ne.
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;
}
Metodu rozšíření můžete volat, jako by byla deklarována u enum typu:
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.
*/
Počínaje C# 14 můžete deklarovat členy rozšíření v bloku rozšíření. Nová syntaxe umožňuje přidat vlastnosti rozšíření. Můžete také přidat členy rozšíření, které se zobrazují jako nové statické metody nebo vlastnosti. Už nejste omezeni na rozšíření, která se jeví jako metody instancí. Následující příklad ukazuje blok rozšíření, který přidá vlastnost rozšíření instance pro Passinga static extension vlastnost pro 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;
}
}
Tyto nové vlastnosti rozšíření voláte, jako by byly deklarovány v rozšířeném typu:
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.");
Grades.MinimumPassingGrade = Grades.C;
Console.WriteLine($"\r\nRaising the bar. Passing grade is now {Grades.MinimumPassingGrade}!\r\n");
Console.WriteLine($"First {(g1.Passing ? "is" : "is not")} a passing grade.");
Console.WriteLine($"Second {(g2.Passing ? "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.
*/
Další informace o nových členech rozšíření najdete v článku o členovéch rozšíření a v článku jazykového odkazu o klíčovém slovu.