无法隐式地从一个类转换为另一个类

Pet*_*ter 0 c# asp.net-mvc

我有一个函数,我根据谁是发起者分配变量.

如果角色转向攻击,功能就是这样 Attack(true)

转到这个功能

    function Attack(bool CharacterAttacking){    
        var Attacker = Monster;
        var Target = Character;

        if (CharacterAttacking)
        {
            Attacker = Character;
            Target = Monster;
        }
Run Code Online (Sandbox Code Playgroud)

怪物是默认选中的.

但如果我想切换它以使角色成为我的攻击者if,那么我就会得到错误

无法将Game.Models.Monster类型隐式转换为Game.Models.Character

如何切换它以使攻击者成为角色并且目标成为怪物?

谢谢

Mat*_*and 5

在这种情况下,您需要实现接口或基类.这允许多个类类型存放在相同的对象类型中,只要它们实现该接口或从基类派生即可.

public interface IFighter
{
    void Attack();
    void Defend();
}
Run Code Online (Sandbox Code Playgroud)

然后,您必须在Character和Monster类中实现此接口.

public class Monster : IFighter
{
    public void Attack()
    {
        //some attack logic
    }

    public void Defend()
    {
        //some defense logic
    }
}

public class Character : IFighter
{
    public void Attack()
    {
        //some attack logic
    }

    public void Defend()
    {
        //some defense logic
    }
}
Run Code Online (Sandbox Code Playgroud)

完成此设置后,您可以将这些属性添加到保存战斗信息的班级中.然后,您可以实现您尝试的方法.

public class Battle
{
    public IFighter Attacker = Monster;
    public IFighter Target = Character;

    public void Attack(bool characterAttacking)
    {
        if (characterAttacking)
        {
            Attacker = Character;
            Target = Monster;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)