Наследование работает только в одну сторону; все дочерние классы являются их родителями, но ни один из родителей не является их ребенком.
Чтобы получить то, что вы хотите, вы должны знать, что класс, который вы рассматриваете как Существо, на самом деле является Магическим. Вы можете проверить это, используя:
//Uses reflection to examine the type; useful in generic-typed situations
bool isMagical = typeof(T).IsAssignableFrom(Magical); //generic to T where T:Creature
//A keyword-based statement that basically does the same thing given an instance
bool isMagical = creatureInstance is Magical;
Если это возможно, вы можете предоставить нерефлексивный способ обнаружить это, объявив что-то в Существе, что должно быть указано в Магическом:
public Class Creature
{
public int HealthPoints {get; set;}
public string Name {get; set;}
public int AttackValue {get; set;}
public abstract CreatureType Type {get;}
public Creature();
}
public Class Magical : Creature
{
public override CreatureType Type {get{return CreatureType.Magical;}}
public int Mana {get; set;}
}
...
if(creatureInstance.Type == CreatureType.Magical) {...}
Как только вы узнаете, что Существо - Магическое, вы можете рассматривать экземпляр как его подкласс, разыгрывая:
//Direct cast; throws an InvalidCastException if creatureInstance isn't Magical
var mana = ((Magical)creatureInstance).Mana;
//Safe cast - returns null if creatureInstance isn't Magical,
//which in this usage will throw a NullReferenceException anyway
var mana = (creatureInstance as Magical).Mana;