次の方法で共有


方法 : 列挙型対応の新しいメソッドを作成する (C# プログラミング ガイド)

拡張メソッドを使用して、特定の列挙型に対応した機能を追加できます。

使用例

次の例では、Grades 列挙型により、生徒が授業で受け取る成績評価が表されています。 Passing という名前の拡張メソッドが Grades 型に追加されており、この型の各インスタンスが、合格点を表しているかどうか自ら "認識" できるようになっています。

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 クラスに動的に更新される静的変数が含まれていること、および拡張メソッドの戻り値がその静的変数の現在の値を反映することにも注意してください。 背後では、拡張メソッドがその拡張メソッドが定義されている静的クラスにおいて直接呼び出されることを、この例は示しています。

コードのコンパイル

このコードを実行するには、Visual Studio で作成した Visual C# コンソール アプリケーション プロジェクトに、コードをコピーして貼り付けます。 既定では、このプロジェクトは、.NET Framework Version 3.5 を対象としており、System.Core.dll への参照と System.Linq の using ディレクティブが含まれます。 これらの要件が 1 つ以上プロジェクトから欠落していても、手動で追加できます。 詳細については、「方法 : LINQ プロジェクトを作成する」を参照してください。

参照

参照

拡張メソッド (C# プログラミング ガイド)

概念

C# プログラミング ガイド