共用方式為


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 專案

請參閱

參考

擴充方法 (C# 程式設計手冊)

概念

C# 程式設計手冊