C# 상속 클래스 부모의 생성자 호출 순서

 

 

기본생성자의 호출 순서

 B가 A를 상속받을 때, B를 생성할 경우 부모의 생성자가 먼저 호출된다.

 상속이 여러단계면 부모부터 자식까지 순서대로 호출된다.

public class TestScript : MonoBehaviour
{
    [Button]
    public void Test()
    {
        var Temp = new B();
    }
}

public class A
{
    public A()
    {
        Debug.Log("A");
    }
}

public class B : A
{
    public B()
    {
        Debug.Log("B");
    }
}

 

 

 

매개변수가 있는 경우

 이번에는 string을 매개변수로 받는 생성자를 각각 만들어 준 뒤, 매개변수로 B를 생성해본다.

 부모의 기본생성자가 호출되고, 자식의 오버로드된 생성자가 호출된다.

public class TestScript : MonoBehaviour
{
    [Button]
    public void Test()
    {
        var Temp = new B("test");
    }
}

public class A
{
    public A()
    {
        Debug.Log("A");
    }

    public A(string str)
    {
        Debug.Log($"A {str}");
    }
}

public class B : A
{
    public B()
    {
        Debug.Log("B");
    }

    public B(string str)
    {
        Debug.Log($"B {str}");
    }
}

 

 

부모의 생성자 호출하기

 C#에서 부모의 생성자를 호출하기 위해서는 base 키워드를 사용한다.

 부모의 기본 생성자가 아니라 지정한 오버로드 생성자가 호출된다. 

public class TestScript : MonoBehaviour
{
    [Button]
    public void Test()
    {
        var Temp = new B("test");
    }
}

public class A
{
    public A()
    {
        Debug.Log("A");
    }

    public A(string str)
    {
        Debug.Log($"A {str}");
    }
}

public class B : A
{
    public B()
    {
        Debug.Log("B");
    }

    public B(string str) : base(str) // base 키워드를 사용하여 부모의 생성자를 호출한다.
    {
        Debug.Log($"B {str}");
    }
}

 

 

결론

 - 상속관계에서는 자식의 인스턴스를 생성할 때 언제나 부모의 기본 생성자가 먼저 호출된다.

 - 오버로드된 부모의 생성자를 호출하고 싶다면 base 키워드를 사용하자.

 

 

 

댓글

Designed by JB FACTORY