C#-在另一个具有相同含义的类中创建类实例

本文关键字:实例 创建 另一个 C#- | 更新日期: 2023-09-27 18:27:25

我想创建一个名为Enemy的类,该类应用于已编程的rpg主题作战系统。问题是,我想在Enemy类中创建多个怪物类型,但随后我必须为每个敌人类的作战系统创建一种可能性,例如Enemy.GoblinEnemy.Golem
问题:
我如何通过在作战系统函数中只使用一个参数来实现这一点?我想用

public static void InitiateBattle ( Player player, Enemy enemy )

但是现在我不能使用Enemy.Goblin实例,因为它不能隐式地将Enemy.Goblin转换为Enemy。我如何用最少的代码最容易地解决这个问题?

C#-在另一个具有相同含义的类中创建类实例

您需要使用继承。

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 {}

然后,您可以将GoblinGolem的实例传递给方法,该语句将是有效的,因为编译器会将您的对象"装箱"到父类型的实例中。

然后,如果您想使用哥布林或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);
}