Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Belirli bir sabit listesi türüne özgü işlevler eklemek için uzantı yöntemlerini kullanabilirsiniz. Aşağıdaki örnekte, numaralandırma bir Grades öğrencinin sınıfta alabileceği olası harf notlarını temsil eder.
Passing türüne Grades adlı bir uzantı yöntemi eklenir, böylece bu türün her örneği artık geçiş notunu temsil edip etmediğini "bilir".
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;
}
Uzantı yöntemini, enum türünde bildirilmiş gibi çağırabilirsiniz.
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.
*/
C# 14'le başlayarak, uzantı bloğunda uzantı üyelerini bildirebilirsiniz. Yeni söz dizimi , uzantı özellikleri eklemenize olanak tanır. Ayrıca, yeni statik yöntemler veya özellikler gibi görünen uzantı üyeleri de ekleyebilirsiniz. Artık örnek yöntemleri gibi görünen uzantılarla sınırlı değilsiniz. Aşağıdaki örnekte Passing için bir örnek genişletme özelliği ve MinimumPassingGrade için statik bir genişletme özelliği ekleyen bir uzantı bloğu gösterilmektedir.
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;
}
}
Bu yeni uzantı özelliklerini, genişletilmiş türde bildirilmiş gibi çağırırsınız.
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.
*/
Yeni uzantı üyeleri hakkında daha fazla bilgiyi uzantı üyeleri makalesinde ve anahtar sözcüğün dil başvurusu makalesindeextension bulabilirsiniz.