如何為列舉建立新方法 (C# 程式設計指南)
您可以使用擴充方法來新增專屬於特定列舉類型的功能。
範例
在下例中,Grades
列舉代表班上學生可能得到的字母分級成績。 已將名為 Passing
的擴充方法新增至 Grades
類型,以便該類型的每個執行個體現在都「知道」它是否代表傳遞等級。
using System;
namespace EnumExtension
{
// Define an extension method in a non-nested static class.
public static class Extensions
{
public static Grades minPassing = Grades.D;
public static bool Passing(this Grades grade)
{
return grade >= minPassing;
}
}
public enum Grades { F = 0, D=1, C=2, B=3, A=4 };
class Program
{
static void Main(string[] args)
{
Grades g1 = Grades.D;
Grades g2 = Grades.F;
Console.WriteLine("First {0} a passing grade.", g1.Passing() ? "is" : "is not");
Console.WriteLine("Second {0} a passing grade.", g2.Passing() ? "is" : "is not");
Extensions.minPassing = Grades.C;
Console.WriteLine("\r\nRaising the bar!\r\n");
Console.WriteLine("First {0} a passing grade.", g1.Passing() ? "is" : "is not");
Console.WriteLine("Second {0} a passing grade.", g2.Passing() ? "is" : "is not");
}
/* 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.
*/
}
}
請注意,Extensions
類別也包含動態更新的靜態變數,以及反映該變數目前值的擴充方法傳回值。 本例示範,在幕後直接對定義所在的靜態類別叫用擴充方法。