기본생성자의 호출 순서
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 키워드를 사용하자.
'🌍 C# Study > C# 케이스 스터디' 카테고리의 다른 글
C# 인스턴스 초기화 순서 정리 (0) | 2021.05.09 |
---|---|
HashSet vs HashTable vs Dictionary (0) | 2021.04.30 |
C# 배열 연속 데이터 채우기 Enumerable.Range (0) | 2021.04.23 |
C# 인덱서 Indexer (0) | 2020.07.13 |
C# Collection Foreach 에서 원소 삭제하기 (0) | 2019.12.15 |