C# 14: extension 키워드
C# 3부터 C# 13까지 일반 타입(예: 클래스)에 자신에게 필요한 메서드를 추가하기 위해 this 파라미터를 사용한 확장 메서드(extension method)를 사용해 왔다.
C# 14에서는 새로운 키워드인 extension을 사용하여 확장 멤버를 선언하는데,
extension 키워드를 사용하여 extension 블럭을 만들고 그 안에 여러 확장 멤버들을 선언할 수 있다.
물론 extension 블럭 안에서 선언된 확장 멤버들에서는 this 키워드를 사용하지 않는다.
예제
// C# 3 ~ C# 13에서 사용한 확장메서드
// static class를 정의
public static class ExClass
{
// static 확장메서드를 정의. 첫번째 파라미터는 this를 붙여 어떤 클래스가 사용할 지만 지정하고,
// 옵션으로 추가적으로 필요한 파라미터는 그 뒤에 선언한다.
public static bool Found(this String str, char ch)
{
int position = str.IndexOf(ch);
return position >= 0;
}
}
// C# 14에서 확장 멤버를 정의할 때는 extension 블럭을 사용
public static class ExClass
{
// extension 블럭을 사용하여 String 타입의 인스턴스 멤버를 확장
extension(String str)
{
public bool Found(char ch)
{
int position = str.IndexOf(ch);
return position >= 0;
}
}
}
C# 14: 확장 멤버 (Extension Members)
C# 3부터 C# 13에서의 확장 메서드(extension method)는 메서드만을 추가할 수 있었지만,
C# 14에서는 확장 메서드를 넘어, 확장 속성 및 확장 연산자를 구현할 수 있고,
또한 인스턴스에 적용되는 확장 멤버 뿐아니라, 확장 대상 타입 자체에 적용되는 static 확장 멤버까지 지원한다.
예제
using System.Drawing;
using System.Numerics;
public static class PointExtensions
{
// Point 인스턴스 확장
// extension 키워드 뒤에 Point 타입과 변수 p를 선언하여 Point 인스턴스를 확장할 수 있도록 함
extension(Point p)
{
// instance method
public Vector2 ToVector() => new(p.X, p.Y);
// instance property
public int ManhattanDistance => Math.Abs(p.X) + Math.Abs(p.Y);
}
// Point 타입 자체를 static 스타일로 확장
extension(Point) // static이므로 Point 뒤에 변수가 필요없다
{
// static property
public static Point Origin => Point.Empty;
// static operator
public static Point operator +(Point left, Point right) =>
new(left.X + right.X, left.Y + right.Y);
}
}
public class Program
{
public static void Main()
{
Point p = new Point(1, 5);
// 인스턴스 확장 메서드 호출
Vector2 v = p.ToVector();
Console.WriteLine(v.Y); // 출력 5
// static 확장 속성 호출
var origin = Point.Origin;
// static 확장 연산자 호출
var result = p + origin;
Console.WriteLine(result); // 출력 {X=1,Y=5}
}
}
본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.