확장 메서드를 사용하여 특정 열거형 형식과 관련된 기능을 추가할 수 있습니다. 다음 예제 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' 키워드의 언어 참조 문서에서 새 확장 멤버에 대해 자세히 알아볼 수 있습니다.
참고하십시오
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET