this() ?
this는 자신을 지칭할 때 사용하는 키워드입니다. => 즉 나를 가르킴!!!
다음은 3개의 생성자를 오버로딩하는 클래스의 코드입니다.
using System;
namespace ThisConstructor
{
class MyClass
{
int a, b, c;
public MyClass() {
this.a = 1;
Console.WriteLine("MyClass()");
}
public MyClass(int b) : this()
{
this.b = b;
Console.WriteLine($"MyClass({b})");
}
public MyClass(int b, int c) : this(b)
{
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(2);
b.PrintFields();
Console.WriteLine();
MyClass c = new MyClass(20, 30);
c.PrintFields();
Console.WriteLine();
}
}
}
실행 결과:
MyClass()
a: 1, b: 0, c: 0)
MyClass()
MyClass(2)
a: 1, b: 2, c: 0)
MyClass()
MyClass(20)
MyClass(20, 30)
a: 1, b: 20, c: 30
상속 ?
클래스는 다른 클래스로부터 필드나 메소드, 프로퍼티 같은 멤버들을 물려 받을 수 있습니다.
물려받는 클래스(파생 클래스: Derived Class), 물려줄 클래스(기반 클래스: Base Class or 부모 클래스)
간단한 예제 코드입니다.
class Base
{
public Base() // 생성자
{
WriteLine("Base()");
}
public void BaseMethod()
{ /* ... */ }
}
class Derived : Base // Base 상속
{
public Derived()
{
WriteLine("Derived()");
}
public void DerviedMethod()
{
base.BaseMethod(); // base 키워드를 통해 기반 클래스에 접근 가능
}
}
이때 base는 this가 자기 지칭의 키워드인 것처럼, 기반 클래스의 키워드입니다.
따라서, 기반 클래스의 생성자 또한 base()로 사용하면 됩니다.
class Base
{
protected string Name;
public Base(string Name)
{
this.Name = Name;
}
}
class Derived : Base
{
public Derived(string Name) : base(Name)
{
/* ... */
}
}
그렇다면 오버라이딩은 어떻게 하는 것일지 코드를 통해 알아봅시다.
class ArmorSuite
{
public virtual void Initialize() // virtual 선언 but private일 경우 오버라이딩 불가
{
Console.WriteLine("ArmorSuite");
}
}
class IronMan : ArmorSuite
{
public override void Initialize() // override 선언
{
base.Initialize();
Console.WriteLine("Repulsor Rays Armed");
}
}
이외에도 메소드를 숨기기 위해 new, 봉인하기 위해 sealed를 사용할 수 있답니다~!
'C#' 카테고리의 다른 글
[C#] Nullable/널 조건부 연산자/널 병합 연산자 (1) | 2023.12.20 |
---|