Приведение объекта класса к интерфейсу C#

Мне интересно, какие возможности дает приведение объекта класса к интерфейсу, который он реализует? Например:

     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? Это явно не поле интерфейса, так как мы не можем с ними работать. Спасибо за совет!

1 ответ

Решение

Когда вы разыгрываете mapObject в IArmy интерфейс все еще остается mapObject класс (ползучесть) внутри, но вы можете назвать только то, что подразумевается IArmy интерфейс.

Если вы спросите, почему и как это можно использовать: вы можете создать другой класс, который реализует IArmy интерфейс и когда вы приведете его к IArmy вы можете обрабатывать его так же, как и другие классы, которые его реализуют.

Другие вопросы по тегам