2014-08-28 5 views
0

Как обойти опрос любого производного класса и записать код дважды?функции процесса и переменные из производного класса абстрактных

Я попытался следующий:

Type t = GetType(obj); 
(obj as t).health 

Делая это, Visual Sudio saysme health is not member of... blah

Вот мой код:

// gameobjects-class  
abstract gameobject 
{ 
Vector2 Position 
void update() 
etc... 


class meteor : gameobject 
{ 
float rotation 
etc... 

class player : gameobject 
{ 
int health, attackpower 
etc... 

class enemy: gameobject 
{ 
int health, attackpower 
etc... 

Внешнего класс доступа к данным из GameObject

class anyclass 
{ 
void checkhealth(gameobject obj) // QUESTION: 
{ 
if (obj as player).health = 0  // 
    kill(obj)      // 
if (obj as enemy).health = 0  // 
    kill(obj)      // 

Любое предложение? Благодаря!

ответ

0

Вы можете создать интерфейс для живых объектов, а затем передать, что к методу

interface ILivingGameObject 
{ 
    int Health {get;set;} 
} 

class Player : GameObject, ILivingGameObject 
{ 
} 

void CheckHealth(ILivingGameObject obj) 
{ 
    if(obj.Health == 0) 
      kill(obj); 
} 

Вы можете прочитать больше Интерфейсы here


В качестве альтернативы вы можете создать LivingObject класс, как игрок и противник наследует и передает это методу

class LivingObject : GameObject 
{ 
    int Health {get;set;} 
} 

class Player : LivingObject 
{ 
} 

void CheckHealth(LivingObject obj) 
{ 
} 
+0

звучит хорошо! проверит это! Спасибо!!!!!! –