C#
최신 C# 기능
C# 11
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# 7 Deconstructor

C# 7 에서 Deconstructor 라는 기능을 제공하고 있는데, 이는 생성자(Constructor)와 대칭적인 개념으로 파괴자(Destructor)와 혼돈하지 말아야 한다. Constructor는 보통 외부에서 입력파라미터를 받아들여 이를 필드에 저장하는 역활을 하는데, Deconstructor는 반대로 필드의 값들을 외부로 전달하는 역활을 한다. 이는 불필요한 리소스를 제거하는 파괴자(Destructor)와 다르다.



Deconstruct() 메서드

클래스에서 Deconstructor를 지원하기 위해서는 아래와 같은 Deconstruct() 메서드를 추가해야 한다. 여기서 out 파라미터들의 숫자는 임의로 정할 수 있으며, 이들 out 파라미터들이 리턴되어 복수 개의 리턴 변수들에게 전달된다.

    public void Deconstruct(out T1 x1, ..., out Tn xn) { ... }
아래 예제를 보면, BasicInfo라는 클래스는 Constructor에서 3개의 입력 파라미터들을 받아들여 3개의 필드에 저장하고 있다. 그리고 Deconstructor 즉 Deconstruct() 메서드에서는 다시 이 3개의 필드의 내용을 out 파라미터로 리턴하고 있다. 이 Deconstruct()는 var (id, name, age) = person; 와 같이 복수 값을 리턴하는 곳에서 자동으로 호출되어 해당 값들을 리턴하게 된다. 즉, Deconstruct()의 out 파라미터들 순서대로 var 변수에 할당되는 것이다. 이러한 점에서 Deconstructor는 Constructor와 대칭되는 기능한다고 볼 수 있다.

예제

using static System.Console;
//using static System.Diagnostics.Debug;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            BasicInfo person = new BasicInfo(1, "Lee", 10);

            // Deconstruct()가 호출되어 복수 리턴 변수들에 할당됨
            var (id, name, age) = person;

            WriteLine($"{id} - {name}");
        }
    }

    class BasicInfo
    {
        private int _id;
        private string _name;
        private int _age;

        // Constructor
        public BasicInfo(int id, string name, int age)
        {
            this._id = id;
            this._name = name;
            this._age = age;
        }

        // Deconstructor
        public void Deconstruct(out int id, out string name, out int age)
        {
            id = this._id;
            name = this._name;
            age = this._age;
        }
    }
}



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




Comment leedors527@*** 2/4/2019 4:15:34 AM
Comment admin@*** 2/4/2019 5:39:20 PM
Comment yonjunhee@*** 3/21/2019 2:23:59 AM
Comment admin@*** 3/21/2019 8:19:19 PM