Приведение объекта класса к интерфейсу C # - PullRequest
0 голосов
/ 01 марта 2019

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

     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 Ответ

0 голосов
/ 01 марта 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...