C#
최신 C# 기능
C# 14
C# 최신 기능
C# 14: extension 키워드
C# 14: null 조건 할당 연산자
C# 14: nameof 향상
C# 14: Span 향상된 암묵적 변환
C# 14: Instance Operator
C# 14: 단순화된 람다 파라미터
C# 14: 새 field 키워드
C# 13
C# 13: params modifier 지원 확장
C# 13: lock 지시어 향상
C# 13: \e (새 Escape Sequence)
C# 13: 객체 초기화 식에 ^ 연산자 사용
C# 13: ref struct 타입 기능 향상
C# 13: partial 속성과 인덱서
C# 13: OverloadResolutionPriority
C# 12
C# 12: 클래스 Primary Constructor
C# 12: 컬렉션 식
C# 12: ref readonly 파라미터 (in)
C# 12: 람다식 디폴트 파라미터
C# 12: InlineArray 특성
C# 12: using alias 모든 타입
C# 12: Experimental, Interceptor
C# 11
C# 11: Raw String Literal
C# 11: 문자열 내삽 복수라인
C# 11: u8 접미어
C# 11: Generic Math 지원
C# 11: Generic Attribute
C# 11: 리스트 패턴
C# 11: 파일 로컬 타입
C# 11: required modifier
C# 11: Auto-default struct
C# 11: ReadOnlySpan 패턴 매칭
C# 11: 확장된 nameof 범위
C# 11: nint, nuint
C# 11: ref 필드
C# 11: 소문자 타입명 경고
C# 11: 향상된 method group 변환
C# 10
VS 2022 설치
C# 10 global using
C# 10 File-scoped Namespace
C# 10 향상된 문자열 내삽
C# 10 향상된 람다식 유추
C# 10 struct 기능 향상
C# 10 record struct
C# 10 확장된 속성패턴
C# 10 향상된 명료한 할당
C# 10 Destructor 기능 개선
C# 9.0
C# 9 레코드 타입
C# 9 init accessor
C# 9 최상위 프로그램
C# 9 향상된 패턴 매칭
C# 9 향상된 Target Typing
C# 9 공변 리턴 타입
C# 9 Native Int 타입
C# 8.0
C# 8 디폴트 인터페이스 멤버
C# 8 패턴 매칭
C# 8 Nullable Reference Type
C# 8 인덱싱과 슬라이싱
C# 8 비동기 스트림
C# 8 using 선언
C# 8 널 병합 할당자
C# 8 구조체 읽기 전용 멤버
C# 8 기타 기능들
C# 7.0
C# 7.0 새기능
C# 7.0 패턴 매칭
C# 7.0 튜플
C# 7.0 로컬 함수
C# 7.0 out 파라미터
C# 7.0 리터럴 표현
C# 7.0 Deconstructor
C# 7.0 ref return
C# 7.0 async 리턴타입
C# 7.0 Expression-bodied
C# 7.0 throw expression
C# 6.0
C# 6.0 새기능
C# 6.0 널 조건 연산자
C# 6.0 문자열 내삽
C# 6.0 Dictionary초기자
C# 6.0 nameof 연산자
C# 6.0 using static문
C# 6.0 catch블럭 await
C# 6.0 Exception 필터
C# 6.0 자동 속성 초기자
C# 6.0 읽기전용 자동 속성
C# 6.0 Expression-bodied

C#으로 이해하는 자료구조
C# 프로그래밍 기초 실습 전자책
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}
    }
}



본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.