Share via


방법: 새 열거형 메서드 만들기(C# 프로그래밍 가이드)

업데이트: 2007년 11월

확장 메서드를 사용하여 특정 열거형 형식에 특정한 기능을 추가할 수 있습니다.

예제

다음 예제에서 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의 버전 3.5를 대상으로 하며 System.Core.dll에 대한 참조와 System.Linq에 대한 using 지시문이 있습니다. 프로젝트에서 이러한 요구 사항 중 하나 이상이 누락된 경우 수동으로 추가할 수 있습니다. 자세한 내용은 방법: LINQ 프로젝트 만들기를 참조하십시오.

참고 항목

개념

C# 프로그래밍 가이드

참조

확장 메서드(C# 프로그래밍 가이드)