게임코디 연제 강좌로 올라온 온라인 공개 책(문서)를 보면서 작성한것...
위임과 C/C++ 에서의 상속과 C#의 상속이 어떻게 다른지 살펴볼 수 있는 예제 코드... 공개 책(문서)에는 서로 따로 표시하고 있었는데 그다지 나눠서 보지 않아도 너무 간결한게 좋아 보인다. (사실 전에는 뭐여 이상한 키워드가 마구 생겼잖아 했었지..)
using System; using System.Collections; using System.Collections.Generic; using System.Threading; using System.Linq; using System.Text; using System.IO; namespace ToolboxTestApp3 { class MissileTurret { public string Name; public GameWorld refGameWorld; public MissileTurret(GameWorld world) { refGameWorld = world; refGameWorld.dg_object += new GameWorld.dg_FindEnemy(FindEnemy); // 위임(다중) } public virtual void FindEnemy() { System.Console.WriteLine("미사일터렛({0}) 적발견!!", Name); } public virtual void Update() { System.Console.WriteLine("미사일터렛({0})", Name); } } class JustTurret : MissileTurret { public JustTurret(GameWorld world) : base(world) // C/C++ 에서는 부모 CLASS 의 이름을 써줘야 했지만 base 로 ok. { } public override void FindEnemy() { System.Console.WriteLine("터렛({0}) 적발견!!", Name); } public override void Update() { // 부모의 함수를 호출하고 싶다면 base.Update() 를 호출하면 됨. System.Console.WriteLine("터렛({0})", Name); } } class GameWorld { public ArrayList gameObjects = new ArrayList(); // 위임 선언 public delegate void dg_FindEnemy(); // 위임객체 public dg_FindEnemy dg_object; public void Update() { int nCount = gameObjects.Count; for (int i = 0; i < nCount; ++i) { ((MissileTurret)gameObjects[i]).Update(); } ////////////////////////////////////////////////////////////////////////// Random r = new Random(); int nRet = r.Next(100); if (nRet > 50) { if (dg_object != null) { System.Console.WriteLine("Subject 에 연결된 Observer 개수: " + dg_object.GetInvocationList().Length); dg_object(); } } else { System.Console.WriteLine("랜덤숫자~: " + nRet); } } } class Program { [STAThread] static void Main(string[] args) { GameWorld world = new GameWorld(); MissileTurret turret1 = new MissileTurret(world); turret1.Name = "터렛1"; JustTurret turret2 = new JustTurret(world); turret2.Name = "터렛2"; MissileTurret turret3 = new MissileTurret(world); turret3.Name = "터렛3"; world.gameObjects.Add(turret1); world.gameObjects.Add(turret2); world.gameObjects.Add(turret3); bool bLoop = true; while (bLoop) { Thread.Sleep(1000); System.Console.WriteLine("게임시작~"); world.Update(); } } } }
'프로그래밍 > 조각코드' 카테고리의 다른 글
[C# WPF] File Drag&Drop / 이미지 표시 / 부분 읽어오기. (0) | 2012.05.10 |
---|---|
[C#] 추상메소드, 인터페이스, 보호클래스(상속불가) 기타등등.. (0) | 2012.05.04 |
[C#] 해당 경로에 있는 파일목록 출력.. (0) | 2012.05.03 |
[C#] 위임이란? (0) | 2012.05.03 |
[wxWidgets] 기본 프레임웍 코드. (0) | 2012.04.26 |