将类对象转换为接口C#

问题描述 投票:-1回答:1

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

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

和它一起使用的类:

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类访问Army字段吗?它显然不是界面的领域,因为我们无法使用它们。谢谢你的建议!

c# interface implements
1个回答
1
投票

当你将mapObject转换为IArmy界面时,它仍然在内部保持mapObject类(Creep),但你只能调用IArmy界面隐含的内容。

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

© www.soinside.com 2019 - 2024. All rights reserved.