您可以使用擴充方法來新增特定列舉類型特有的功能。 在下列範例中,Grades 列舉表示學生在班級中可能獲得的字母成績。 名為 Passing 的擴充方法已新增到 Grades 類型中,讓該類型的每個實例現在都「知道」它是否代表通過的成績。
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;
}
您可以像在類型 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.
*/
從 C# 14 開始,您可以在延伸模組區塊中宣告 擴充成員 。 新的語法可讓您新增 延伸模組屬性。 您也可以新增顯示為新靜態方法或屬性的擴充成員。 您不再受限於被視為實例方法的擴充功能。 下列範例顯示一個擴充區塊,該區塊新增了Passing的實例擴充屬性和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;
}
}
您可以呼叫這些新的延伸模組屬性,就像這些屬性在擴充類型上宣告一樣:
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.
*/
您可以在關於擴充成員的文章以及關於extension關鍵字的語言參考文章中進一步瞭解新的擴充成員。