반응형
CS 기초강좌 2. C# 클래스 기초
간단한게 상속 구조의 클래스를 만들어 보았습니다. 아래 코드
using System;
class Parent
{
public int data = 0;
}
class Child : Parent
{
}
class Program
{
static void Main(string[] args)
{
Child c = new Child();
}
}
class Parent는 부모 클래스이고 class Child : Parent 에 부모를 상속시킨 구조입니다.
그리고 Child c = new Child(); 코드로 자식을 생성시켜보았습니다.
필드의 재정의
using System;
class Parent
{
public int data = 0;
}
class Child : Parent
{
public int data = 10; //아..
}
class Program
{
static void Main(string[] args)
{
Child c = new Child();
Console.WriteLine(c.data);
Console.WriteLine(((Parent)c).data);
}
}
자식에서 다시 data 정의할수 있습니다. 왠만하면 안하는게 더 좋겠죠. 이런게 가능하단 것과 어떻게 부모의 데이터를 접근할수 있는지(형변환) 등을 봐두시면 됩니다.
함수 오버라이드
using System;
class Parent
{
public void f1() { Console.WriteLine("Parent f1"); }
}
class Child : Parent
{
public void f1() { Console.WriteLine("Child f1"); }
}
class Program
{
static void Main(string[] args)
{
Parent p = new Parent();
p.f1();
Child c = new Child();
c.f1();
Parent p1 = new Child();
p1.f1();
}
}
함수또한 정의가 가능합니다. 해당 함수간의 호출결과를 보시면 됩니다. 부모 레퍼런스에 자식을 생성한뒤 f1을 호출해도 부모의 f1이 호출됩니다.
가상함수
명시적으로 가상함수를 만들면, 위와는 다른 결과를 볼수 있습니다. 작업해 봅니다.
using System;
class Parent
{
public virtual void f1() { Console.WriteLine("Parent f1"); }
}
class Child : Parent
{
public override void f1() { Console.WriteLine("Child f1"); }
}
class Program
{
static void Main(string[] args)
{
Parent p = new Parent();
p.f1();
Child c = new Child();
c.f1();
Parent p1 = new Child();
p1.f1();
}
}
Parent 클래스 에서 함수에 virtual 을 설정하고 Child에서 override로 명시적으로 가상함수를 쓰겠다고 표시하였습니다. 이렇게 하면 부모 래퍼런스에 자식을 생성했을 때 override 함수를 호출하는 결과를 볼 수 있습니다.
상속관계에서 어떤 경우 어떤 맴버와 메소드가 참조되는지를 봐두시면 도움이 될 것입니다.
반응형
'IT > C#(CS)' 카테고리의 다른 글
CS 기초강좌 6. 값 타입과 참조 타입, 스택과 힙, struct와 class (4) | 2020.11.11 |
---|---|
CS 기초강좌 5. C# System.Object에 대하여 (4) | 2020.10.19 |
CS 기초강좌 4. C# 타입, 변수의 특징 (2) | 2020.10.18 |
CS 기초강좌 3. C# interface 인터페이스 (2) | 2020.10.17 |
CS 기초강좌 1. C# 콘솔 프로젝트 세팅, 표준 입출력 (0) | 2020.10.14 |
댓글