this() 생성자

00·2024년 12월 12일

C#

목록 보기
11/149
using System;

namespace ThisConstructor
{
    class MyClass
    {
        int a, b, c; // int 형식의 필드 a, b, c

        public MyClass() // 생성자 MyClass() : 매개변수를 입력받아 필드를 원하는 값으로 초기화
        {
            this.a = 5425;
            Console.WriteLine("MyClass()");
        }

        public MyClass(int b) : this() // this()는 자기 자신의 생성자를 가리킴.
                                       // 생성자에서만 사용 가능. 얘처럼 생성자의 코드 블록 앞쪽에서만.
                                       // this()는 MyClass()를 호출함.
                                       // 이렇게 하는 이유는 a를 초기화 하려고 MyClass()를 호출해서 처리시킬 수 없는데, 
                                       // 왜냐하면 원래는 new 연산자 없이 생성자를 호출할 수는 없기 때문.
                                       // new 연산자를 쓰게 되면 해당 객체 외에 또 다른 객체를 만들어야 함.
                                       // 이럴때 this()를 쓰면 자기 자신의 생성자를 가리키니까 new 연산자 안쓰고 해결 가능.
        {
            this.b = b;
            Console.WriteLine($"MyClass({b})");
        }

        public MyClass(int b, int c) : this(b) // this(int)는 MyClass(int)를 호출함.
        {
            this.c = c;
            Console.WriteLine($"MyClass({b}. {c})");
        }

        public void PrintFields()
        {
            Console.WriteLine($"a:{a}, b:{b}, c:{c}");
        }
    }

    class MainApp
    {
        static void Main(string[] args)
        {
            MyClass a = new MyClass();
            a.PrintFields();
            Console.WriteLine();

            MyClass b = new MyClass(1);
            b.PrintFields();
            Console.WriteLine();

            MyClass c = new MyClass(10, 20);
            c.PrintFields();
        }
    }
}

0개의 댓글