C#-在另一个具有相同含义的类中创建类实例
本文关键字:实例 创建 另一个 C#- | 更新日期: 2023-09-27 18:27:25
我想创建一个名为Enemy
的类,该类应用于已编程的rpg主题作战系统。问题是,我想在Enemy
类中创建多个怪物类型,但随后我必须为每个敌人类的作战系统创建一种可能性,例如Enemy.Goblin
或Enemy.Golem
问题:
我如何通过在作战系统函数中只使用一个参数来实现这一点?我想用
public static void InitiateBattle ( Player player, Enemy enemy )
但是现在我不能使用Enemy.Goblin
实例,因为它不能隐式地将Enemy.Goblin
转换为Enemy
。我如何用最少的代码最容易地解决这个问题?
您需要使用继承。
public class Enemy
{
// put all properties and methods common to all here
}
public class Goblin: Enemy
{
// goblin specific stuff here
}
然后你就可以把一个小妖精当作敌人。
听起来你想使用继承?
public class Enemy {}
public class Goblin : Enemy {}
public class Golem : Enemy {}
然后,您可以将Goblin
或Golem
的实例传递给方法,该语句将是有效的,因为编译器会将您的对象"装箱"到父类型的实例中。
然后,如果您想使用哥布林或Golem子类中的成员,则需要使用as
:将enemy
参数变量"强制转换"回适当的类型
public static void InitiateBattle (Player player, Enemy enemy)
{
var golem = enemy as Golem;
var goblin = enemy as Goblin;
}
请确保在强制转换后检查null!
请记住,C#不允许多重继承;每个类只能从一个父类继承。
我认为最好使用接口。
public interface IEnemy
{
//e.g.
public void Attack();
}
public class Goblin : IEnemy
{
public void Attack()
{
throw new System.NotImplementedException();
}
}
public class Battle
{
public static void InitiateBattle(Player player, IEnemy enemy);
}