Интерфейсы - в чем смысл?

Причина интерфейсов действительно ускользает от меня. Насколько я понимаю, это своего рода обход несуществующего множественного наследования, которого нет в C # (по крайней мере, мне так сказали).

Все, что я вижу, это то, что вы заранее определяете некоторые члены и функции, которые затем необходимо снова переопределить в классе. Таким образом, делая интерфейс избыточным. Это просто кажется синтаксическим ... ну, для меня мусором (пожалуйста, не обижайтесь. Мусор как бесполезный материал).

В приведенном ниже примере, взятом из другого потока интерфейсов C # при переполнении стека, я бы просто создал базовый класс называется Pizza вместо интерфейса.

простой пример (взят из другого вклада в переполнение стека)

public interface IPizza
{
    public void Order();
}

public class PepperoniPizza : IPizza
{
    public void Order()
    {
        //Order Pepperoni pizza
    }
}

public class HawaiiPizza : IPizza
{
    public void Order()
    {
        //Order HawaiiPizza
    }
}
251
задан Uwe Keim 27 February 2019 в 07:22
поделиться

1 ответ

Давайте возьмем пример. Скажите, что я - Робот, и я могу стрелять в людей все вокруг вокруг меня. Но, проблема, у меня нет оружия. Я также не понимаю, как работает оружие. Но я знаю, что оружие является объектом, который имеет триггер, который при нажатии уничтожает людей. Так, код для этого посмотрит что-то как below:-

public class Robot{

    public void ShootPeopleWith( weapon IWeapon ){
        weapon.PressTrigger()
    }
}

interface IWeapon{
   PressTrigger()
}

, Вы видите, что Робот ожидает любого, кто хочет, чтобы он стрелял в людей для предоставления ему оружие сначала. Теперь, он не знает что оружие. Независимо от того, что Вы предоставляете мне, это должно иметь триггер, потому что я только знаю для нажатия триггера, и я знаю, что это служит моей цели. Если Вы предоставляете мне что-то, что не имеет триггера, я не могу функционировать.

Теперь, там прибывает беспилотник, который дает Роботу команду стрелять в людей. Это также предоставляет ему оружие.

public class Drone{
    List<Robots> allRobotsInArea = someList

    public void DelegateARobot(){
        robot = select a robot from allRobotsInArea
        IWeapon weapon = new MachineGun();    //procuring a machine gun
        robot.ShootPeopleWith(weapon);
    }

}

Вы видите здесь, что IWeapon является соглашением между Роботом и Беспилотником. Это говорит, что независимо от того, что Вы даете мне, должен иметь триггер. Так, пулемет должен иметь триггер. Давайте реализуем немногих weapons:-

public class MachineGun : IWeapon{
    public void PressTrigger(){
        Fire40RoundsPerSecond();
    }
    ...
}

public class Sniper() : IWeapon{
    public void PressTrigger(){
        SayQuackQauck();
    }
}

, который Беспилотник может теперь легко передать в любом оружии как Снайпер и MachineGun к Роботу.

public class Pumpkin{
    public void FreakPeopleOut(){
        GlowInTheDark();
    }
}

беспилотник не может передать в Тыкве даже при том, что она может использоваться в качестве оружия как robot.ShootPeopleWith(new Pumpkin());, потому что она не имеет триггера и нарушает контракт, который ожидает Робот. Можно ли теперь утверждать это, почему робот не может ожидать Оружие родительского класса, а не интерфейс IWeapon? Поскольку человек, пишущий класс Робота, не хочет определять родительский класс. Человек, использующий Робот, должен идеально определять родительский класс, если он уже не существует, на основе контракта, который ожидает Робот, хочет ли он использовать Робот.

0
ответ дан 23 November 2019 в 02:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: