본문 바로가기
프로그래밍/C#

C# 가상함수(Virtual)와 오버라이드(override)

by neive 2016. 10. 27.
728x90

 

그림... 은 없고 가상함수와 오버라이드를 가장 쉽게 이해할 수 있는 예제-

몬스터를 가상함수로 만든다면! 입니다

이보다 적절한 예제가 있을까~ 물론 몬스터 역시 무언가로 상속 받고 그 상속 받은 모체를 PC 에도 적용

할 수 있고 하지만 이해를 위해서 다 버리고 몬스터와 보스만 가지고 어떻게 활용할 수 있는지 보시죠~

 

예제

 

// Monster.cs ------------------------------------------

using UnityEngine;	// 유니티 엔진 안쓰면 지우면 됨
using System.Collections;

public class Monster : MonoBehaviour {	// 유니티 엔진 안쓰면 MonoBehaviour 지우면 됨

	public int m_nHp;

	// Use this for initialization
	virtual protected void Start () {
		InitStat ();
	}

	virtual public void InitStat() {
		m_nHp = 10;
	}

	public bool IsLive() {
		return m_nHp > 0;
	}
}


// Monster_Boss.cs --------------------------------------

using UnityEngine;
using System.Collections;

public class Monster_Boss : Monster {

	// Use this for initialization
	override protected void Start () {
		base.Start ();	// 일반 몬스터와 초기화는 같게
		// 보스 등장 애니메이션!
	}

	// Monster_Boss 에서는 InitStat 을 호출 한 적 없지만 위의
	// base.Start() 에서 InitStat 의 가상함수를 호출 함으로써 아래가 실행
	override public void InitStat() {
		m_nHp = 100;
	}
	
	// 여기엔 없지만 IsLive 가 있다고 보면 된다
}

// Stage.cs ----------------------------------------------

using UnityEngine;
using System.Collections;

public class Stage : MonoBehaviour {

	protected ArrayList m_MobList; // Monster Object List

	// Use this for initialization
	void Start () {
		m_MobList.Add (new Monster ());
		m_MobList.Add (new Monster ());
		m_MobList.Add (new Monster_Boss ());
	}
	
	// 몬스터 모두 죽었나 체크 (보스 포함)
	protected bool CheckClear () {
		for (int i=0; i<m_MobList.Count; i++) {
			Monster tmp = (Monster)m_MobList [i];	// Monster_Boss 조차도 Monster 로 받을 수 있다
			if(tmp.IsLive())
				return false;
		}

		return true;
	}
}



728x90

'프로그래밍 > C#' 카테고리의 다른 글

C# long to Time (Day, Hour, Min)  (0) 2016.12.05
C# 에서 ListView 항목 csv (엑셀) 로 저장  (0) 2016.11.30
ArrayList 초기화 방법들  (0) 2016.09.23
Close Button Event  (0) 2016.09.05
RX vs2012 에서 설치  (0) 2016.08.25

댓글