Posts C# Deconstructor
Post
Cancel

C# Deconstructor

Deconstructor


1
2
3
4
5
class Student
{
    public int id;
    public string name;
}

클래스가 있다.

1
Student student = new Student();

객체도 있다.

1
(int id, string name) = student;

위와 같이 한다고 해서 객체의 필드들이 각각의 변수에 할당되지는 않는다.


1
2
3
4
5
6
7
8
9
10
11
class Student
{
    public int id;
    public string name;

    public void Deconstruct(out int id, out string name)
    {
        id = this.id;
        name = this.name;
    }
}

그런데 이렇게 Deconstruct() 메소드를 작성하면

1
(int id, string name) = student;

이런 사용이 가능해진다.

이런 메소드를 Deconstructor라고 하며,

객체의 필드들을 각각의 변수로 분해할 수 있도록 해준다.


메소드 이름을 정확히 Deconstruct라고 작성해야 하며,

모든 매개변수가 out 한정자를 갖는 것이 특징이다.


여기서 주의할 점은, 튜플과는 다르다는 것이다.

1
(int id, string name) = student;

이것이 Deconstruct() 호출이고,

1
(int id, string name) tuple = student;

이건 튜플로의 형변환이다.


1
2
int id;
string name;

이렇게 이미 선언된 변수가 있을 경우

1
(id, name) = student;

곧바로 분해하여 전달할 수 있다.


1
2
3
string name;

(int id, name) = student; // 불가능

아쉽게도 이런건 안된다.


References


This post is licensed under CC BY 4.0 by the author.