현재 진행하는 프로젝트에서 상속에 대한 이해가 부족한 것 같아서 상속을 공부하기로 함
상속(Inheritance) : 유산이나 지위를 물려 받다
C#에서도 마찬가지로 이러한 클래스 간에 메서드 속성 등을 상속 받는 것이 가능함
class ParentClass
{
public int MyField { get; set; }
public void MyMethod()
{
Console.WriteLine("Method from ParentClass");
}
}
class ChildClass : ParentClass
{
public void AnotherMethod()
{
base.MyMethod(); // 부모 클래스의 MyMethod 호출
Console.WriteLine("Method from ChildClass");
}
}
chat gpt의 예시
상속의 구현은 다음과 같이 클래스 이름 옆에 : 상위 클래스이름
을 붙여 줌으로서 구현 가능하다.
이러한 상속에는 특이점이 있는데
자식 클래스의 생성자를 호출할 경우 부모 클래스의 생성자 또한 같이 호출된다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Inheritance
{
internal class App
{
public App()
{
new Child();
}
}
}
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Inheritance
{
internal class Child : Parent
{
public Child()
{
Console.WriteLine("Child생성자 생성");
}
}
}
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Inheritance
{
internal class Parent
{
public float num = 150;
public Parent()
{
Console.WriteLine("Parent생성자 생성");
}
public void PrintHelloWorld()
{
Console.WriteLine("HelloWorld");
}
}
}
실험해본 결과 자식클래스의 생성자를 호출할 경우 부모 클래스의 생성자또한 호출되는 것을 확인할 수 있다.
부모 클래스의 메서드나 속성을 사용하고 싶을땐 다음과 같이 base로 접근 가능하다.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Inheritance
{
internal class Child : Parent
{
public Child()
{
base.PrintHelloWorld();
Console.WriteLine(base.num);
Console.WriteLine("Child생성자 생성");
}
}
}
Parent생성자가 먼저 생성되고 HelloWorld와 num이 잘 출력되는 모습
그 외에도 override를 통해 부모 클래스의 메서드를 재정의 하는 것이 가능하다 다만 이 경우 부모클래스의 메서드가 virtual 또는 abstract로 표시되야 한다.
'개인 공부' 카테고리의 다른 글
유니티 오디오 클립 압축형식(Compression Format) (0) | 2024.01.05 |
---|---|
렌더링 파이프라인 (0) | 2023.09.06 |
유니티 2D에서 물체 충돌 시 떨림이 나타는 이유 (0) | 2023.08.19 |
동기/비동기/스레드/프로세스/코루틴 (0) | 2023.08.16 |
코루틴(Coroutine)이란? (0) | 2023.08.09 |