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

C# 无法从一个类隐式转换为另一个类,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个函数,根据谁是发起人来分配变量 函数是这样的,如果角色转向攻击attack(true) 转到此函数 function Attack(bool CharacterAttacking){ var Attacker = Monster; var Target = Character; if (CharacterAttacking) { Attacker = Character;

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

函数是这样的,如果角色转向攻击
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

我如何切换它,使攻击者成为角色,目标成为怪物


谢谢

在这种情况下,您需要实现一个接口或基类。这允许在同一对象类型中容纳多个类类型,只要它们实现该接口或派生自基类

public interface IFighter
{
    void Attack();
    void Defend();
}
然后你必须在你的角色和怪物类中实现这个接口

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

在这种情况下,您需要实现一个接口或基类。这允许在同一对象类型中容纳多个类类型,只要它们实现该接口或派生自基类

public interface IFighter
{
    void Attack();
    void Defend();
}
然后你必须在你的角色和怪物类中实现这个接口

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

使用
接口
并确保Games.Models.Monster类和Games.Models.Character类都实现该接口。任何通用功能都将在接口上声明。使用
接口
并确保Games.Models.Monster类和Games.Models.Character类都实现了该接口。任何通用功能都将在接口上声明。然后它们可以互换使用。“需要实现接口”对我来说有点过于强烈了。。。基类就可以了。“需要实现接口”对我来说有点太强了。。。基类就可以了。