Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 같은 클래스 내 다른 생성자를 호출하는 방법 (this와 base 키워드 활용)

C#에서는 생성자 체이닝(Constructor Chaining)을 통해 하나의 생성자에서 같은 클래스의 다른 생성자나 부모 클래스의 생성자를 호출할 수 있습니다. 이 기능은 코드 중복을 줄이고 초기화 로직을 재사용할 수 있게 해줍니다.

같은 클래스 내 생성자 호출 – this 키워드

동일한 클래스 내에서 오버로딩된 다른 생성자를 호출하려면 this 키워드를 사용합니다. 생성자 선언부 뒤에 콜론(:)과 함께 this()를 붙이면 됩니다.

예제 코드

class Demo{
    public Demo(){
        System.Console.WriteLine("Parameter less constructor called");
    }
    public Demo(int firstNumber, int secondNumber) : this(){
        System.Console.WriteLine($"{firstNumber} {secondNumber}");
    }
    public Demo(int firstNumber, int secondNumber, int thirdNumber) : this(firstNumber, secondNumber){
        System.Console.WriteLine($"{firstNumber} {secondNumber} {thirdNumber}");
    }
}
class Program{
    static void Main(){
        Demo obj = new Demo(1, 2, 3);
        Console.ReadLine();
    }
}

실행 결과

Parameter less constructor called
1 2
1 2 3

위 예제에서 Demo(1, 2, 3) 생성자가 호출되면, this(firstNumber, secondNumber)에 의해 먼저 두 매개변수 생성자가 실행되고, 이어서 this()에 의해 매개변수 없는 생성자까지 연쇄적으로 호출됩니다. 즉, 호출 순서는 가장 마지막에 도달한 생성자부터 역순으로 실행됩니다.

부모 클래스의 생성자 호출 – base 키워드

상속 관계에서 부모(기반) 클래스에 정의된 생성자를 호출하려면 base 키워드를 사용합니다.

예제 코드

class DemoBase{
    public DemoBase(int firstNumber, int secondNumber, int thirdNumber){
        System.Console.WriteLine("Base class Constructor");
        System.Console.WriteLine($"{firstNumber} {secondNumber} {thirdNumber}");
    }
}
class Demo : DemoBase{
    public Demo(int firstNumber, int secondNumber, int thirdNumber) : base(firstNumber, secondNumber, thirdNumber){
        System.Console.WriteLine("Derived class Constructor");
        System.Console.WriteLine($"{firstNumber} {secondNumber} {thirdNumber}");
    }
}
class Program{
    static void Main(){
        Demo obj = new Demo(1, 2, 3);
        Console.ReadLine();
    }
}

실행 결과

Base class Constructor
1 2 3
Derived class Constructor
1 2 3

정리

  • this(...): 같은 클래스 내의 다른 오버로드된 생성자를 호출할 때 사용합니다.
  • base(...): 부모 클래스의 생성자를 호출할 때 사용합니다.
  • 두 키워드 모두 생성자 이름 뒤에 콜론(:)과 함께 작성하며, 매개변수 없는 생성자를 호출할 경우 괄호 안을 비우면 됩니다.
  • 생성자 체이닝을 활용하면 공통 초기화 코드를 한 곳에 모아 코드 중복을 효과적으로 줄일 수 있습니다.