将 class 对象转换为接口 C#

Casting class object to interface C#

我想知道将 class 对象转换为它实现的接口有什么机会?例如:

     public interface IOwner
        {
            int Owner { get; set; }
        }

      public interface IArmy
        {
            Army Army { get; set; }
        }

      public interface ITreasure
        {
            Treasure Treasure { get; set; }
        }

      public class Creep : IOwner, IArmy, ITreasure
       {
        public int Owner { get; set; }
        public Army Army { get; set; }
        public Treasure Treasure { get; set; }   
       }

和 class 与之配合使用:

public static class Interaction

{
    public static void Make(Player player, object mapObject)
    {
        if (mapObject is IArmy)
            if (player.CanBeat(((IArmy)mapObject).Army))
            {
                if (mapObject is IOwner)
                    ((IOwner)mapObject).Owner = player.Id;
                if (mapObject is ITreasure)
                    player.Consume(((ITreasure)mapObject).Treasure);
            }

所以现在当我调用此行时:(player.CanBeat(((IArmy)mapObject).Army)) 我可以从 mapObject class 访问陆军战场吗?这显然不是接口的领域,因为我们无法使用它们。谢谢指教!

当您将 mapObject 转换为 IArmy 接口时,它仍然在内部保持 mapObject class(蠕变),但您只能调用 [= 所暗示的内容11=] 接口.

如果你问为什么以及如何使用它:你可以创建另一个实现 IArmy 接口的 class,当你将它转换为 IArmy 时,你可以同样地处理它与实现它的其他 classes 一样。