출처 : https://www.youtube.com/watch?v=2bJyfyVRaiM&list=PL4SIC1d_ab-Y-bBKojxhtFWwNpawMM1h5&index=29
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
class FightUnit
{
// 외부 자식 내부 까지만
// 디폴트 접근 제한 지정자는 private
protected string Name = "NONE";
protected int AT = 10;
// protected int ItemAT = 10;
protected int HP = 100;
//public static virtual void Test()
//{
// this가 없어서 virtual 안됨.
//}
// 이 문법의 핵심은
// 자식에서 만약 나의 /*같은 이름의 함수나 프로퍼티*/를 재구현했다면
// 자식의 형태의 /*같은 이름의 함수나 프로퍼티*/를 호출해 주세요.
// 이걸 오버라이딩
// 다형(동적바인딩)의 핵심 문법중 하나이다.
public virtual int GetAT()
{
Console.WriteLine("FIGHTUNIT의 GETAT");
return AT;
}
// 프로퍼티는 VIRTUAL 된다.
// 접근제한자는 부모와 자식이 같아야한다.
public virtual int DMGAT
{
get
{
Console.WriteLine("FIGHTUNIT의 GETAT");
return AT;
}
}
// 업캐스팅
// DamageFightUnit
// 첫번째 상속의 개념을 지키기 위해서
// (코드 재활용성) (코드를 적게 치고 최대한의 효과를 누리고 싶다.)
public void Damage(FightUnit _OtherFightUnit)
{
// 각자 플레이어면 플레이어의 것
// _OtherFightUnit.AT
int AT = _OtherFightUnit.DMGAT;
Console.WriteLine(_OtherFightUnit.Name + "에게" + _OtherFightUnit.AT + "만큼의 데미지를 입었습니다.");
HP -= AT;
}
// 생성자는 오버라이딩 할 수 없다.
//public virtual FightUnit()
//{
//}
// 오버로딩
// DamagePlayer
//public void Damage(Player _OtherFightUnit, int _DamagePlus)
//{
// //_OtherFightUnit.AT;
// Console.WriteLine(_OtherFightUnit.Name + "에게" + _OtherFightUnit.AT + "만큼의 데미지를 입었습니다.");
// HP -= _OtherFightUnit.AT;
//}
}
class Player : FightUnit
{
int itemAT = 5;
// 나는 부모님의 GetAT를 재구현 했다.
public override int DMGAT
{
get
{
Console.WriteLine("플레이어의 GETAT");
return AT + itemAT;
}
}
public Player(string _Name)
{
Name = _Name;
}
}
class Monster : FightUnit
{
int MonsterLv = 2;
public Monster(string _Name)
{
Name = _Name;
}
public override int GetAT()
{
Console.WriteLine("몬스터의 GETAT");
return AT + MonsterLv;
}
}
namespace _30Overrading
{
class Program
{
static void Main(string[] args)
{
//
Player NewPlayer = new Player("플레이어");
Monster NewMonster = new Monster("몬스터");
FightUnit NewUnit = NewMonster;
// FightUnit NewFight = new FightUnit();
// NewPlayer.GetAT();
NewPlayer.Damage(NewMonster);
NewMonster.Damage(NewPlayer);
}
}
}
'C# 개인 공부 기록용 > 어소트락 게임아카데미 - C# 무료강의[2019] 총48강' 카테고리의 다른 글
[C# 강의 30화]인터페이스 (1) | 2022.10.25 |
---|---|
[C# 강의 28화]오버로딩 (0) | 2022.10.25 |
[C# 강의 27화]partial (0) | 2022.10.25 |
[C# 강의 26화]클래스별 파일 분리 (0) | 2022.10.25 |
[C# 강의 24화]프로퍼티 (0) | 2022.10.25 |