HOW TO:建立列舉型別的新方法 (C# 程式設計手冊)
您可以使用擴充方法,加入特定列舉型別 (Enum Type) 特有的功能。
範例
在下列範例中,Grades 列舉型別 (Enumeration) 表示學生在班上可能會得到的成績 (用字母表示)。擴充方法 Passing 會加入至 Grades 型別,這樣該型別的每個執行個體 (Instance) 現在會知道它代表的是否為及格分數。
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
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 類別 (Class) 也包含動態更新的靜態變數,而且擴充方法的傳回值會反映該變數的目前值。此範例示範如何在幕後於定義擴充方法的靜態類別上直接叫用 (Invoke) 擴充方法。
編譯程式碼
若要執行這個程式碼,請將它複製並貼上至在 Visual Studio 中所建立的 Visual C# 主控台應用程式專案。根據預設,這個專案是以 .NET Framework 3.5 版為目標,而且有 System.Core.dll 的參考,以及 System.Linq 的 using 指示詞。如果專案中缺少一個或多個要求,您可以手動加入。如需詳細資訊,請參閱 HOW TO:建立 LINQ 專案。