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

时间:2016-06-09 00:26:41

标签: c# asp.net-mvc

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

如果角色转向攻击Attack(true)

功能就是这样

转到此功能

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

        if (CharacterAttacking)
        {
            Attacker = Character;
            Target = Monster;
        }
默认选择

怪物。

但如果我想切换它以便角色是我if中的攻击者,那么我就会收到错误

  

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

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

谢谢

1 个答案:

答案 0 :(得分:5)

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

public interface IFighter
{
    void Attack();
    void Defend();
}

然后你必须在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
    }
}

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

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

    public void Attack(bool characterAttacking)
    {
        if (characterAttacking)
        {
            Attacker = Character;
            Target = Monster;
        }
    }
}