Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Anda dapat menggunakan metode ekstensi untuk menambahkan fungsionalitas khusus untuk jenis enum tertentu. Dalam contoh berikut, enumerasi nilai Grades mewakili kemungkinan nilai huruf yang mungkin diterima oleh siswa di kelas. Metode ekstensi bernama Passing ditambahkan ke tipe Grades sehingga setiap instans dari tipe itu sekarang "tahu" apakah itu mewakili passing grade atau tidak.
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;
}
Anda dapat memanggil metode ekstensi seolah-olah dideklarasikan pada tipe enum.
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.
*/
Dimulai dengan C# 14, Anda dapat mendeklarasikan anggota ekstensi dalam blok ekstensi. Sintaks baru memungkinkan Anda menambahkan properti ekstensi. Anda juga dapat menambahkan anggota ekstensi yang tampaknya menjadi metode atau properti statis baru. Anda tidak lagi terbatas pada ekstensi yang terlihat seperti metode instans. Contoh berikut menunjukkan blok ekstensi yang menambahkan properti ekstensi instans untuk Passing, dan properti ekstensi statis untuk 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;
}
}
Anda memanggil properti ekstensi baru ini seolah-olah mereka dinyatakan pada jenis yang diperluas:
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.
*/
Anda dapat mempelajari selengkapnya tentang anggota ekstensi baru dalam artikel tentang anggota ekstensi dan di artikel referensi bahasa pada extension kata kunci.