다음을 통해 공유


열거형에 대한 새 메서드를 만드는 방법(C# 프로그래밍 가이드)

확장 메서드를 사용하여 특정 열거형 형식과 관련된 기능을 추가할 수 있습니다. 다음 예제 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;
    }
}

이러한 새 확장 속성은 확장 형식에서 선언된 것처럼 호출합니다.

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;
    }
}

확장 멤버에 대한 문서 및 'extension' 키워드의 언어 참조 문서에서 새 확장 멤버에 대해 자세히 알아볼 수 있습니다.

참고하십시오