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