static void Main() { /* Пример 1 Реализация метода интрефейса через унаследование от абстрактного класса */ Driver driver = new Driver(); driver.Move(); // Шофёр ведет машину /* Пример 2 Реализация метода интерфейса унаследованная от базового класса */ HeroAction heroAction = new HeroAction(); heroAction.Move(); // Move in BaseAction /* Пример 3 Изменение реализации интерфейсов в производных классах */ BaseAction2 baseAction2 = new HeroAction2(); baseAction2.Move(); // Move In HeroAction2 IAction action2 = new HeroAction2(); action2.Move(); // Move In HeroAction2 HeroAction2 heroAction2 = new HeroAction2(); heroAction2.Move(); // Move In HeroAction2 /* Пример 4 Повторная реализация интерфейса в классе-наследнике */ BaseAction3 action3 = new HeroAction3(); action3.Move(); // Move in BaseAction3 IAction action4 = new HeroAction3(); action4.Move(); // Move in HeroAction3 HeroAction3 action5 = new HeroAction3(); action5.Move(); // Move in HeroAction3 /* Пример 5 Явная реализация интерфейса */ BaseAction4 action6 = new HeroAction4(); action6.Move(); // Move in BaseAction4 IAction action7 = new HeroAction4(); action7.Move(); // Move in IAction4 HeroAction4 action8 = new HeroAction4(); action8.Move(); // Move in HeroAction4 }
static void actionExample() { HeroAction action1 = new HeroAction(); action1.Move(); // Move in BaseAction ((IAction)action1).Move(); // Move in HeroAction IAction action2 = new HeroAction(); action2.Move(); // Move in HeroAction }
public static void Display() { Person person = new Person(); Car car = new Car(); Action(person); Action(car); Driver driver = new Driver(); Action(driver); HeroAction action = new HeroAction(); action.Move(); }
public static void Display() { BaseAction action1 = new HeroAction(); action1.Move(); // Move in HeroAction IAction action2 = new HeroAction(); action2.Move(); // Move in HeroAction action1.Move2(); // Move2 in BaseAction action2.Move2(); // Move2 in BaseAction BaseAction action3 = new HeroActionRealized(); action3.Move3(); // Move3 in BaseAction IAction action4 = new HeroActionRealized(); action4.Move3(); // Move3 in HeroActionRealized }
public static void OutTask() { Console.WriteLine("---- Основные сведения об интерфейсах ----\n" + "Интерфейс представляет ссылочный тип, используется для определения \n" + "некоторого функционала - набор методов и свойств и реализации." + "После данный функционал реализуют классы или структуры, которые применяют применяют данные интерфейса." + "По умолчанию интерфейсы имеют модификатор доступа internal.\n" + "Интерфейсы не могут иметь модификатора доступа abstract" + "В интерфейсах константы и статические классы имеют модификатор доступа public\n" + "В класс можно добавлять неограниченное количество интерфейсов\n" + "1.Интерфейсы и преобразование типов\n" + "2.Явная реализация интерфейсов\n" + "Если мы используем модификатор доступа не public для полей и методов," + " то необходимо использовать явную реализацию\n" + "Если мы явно реализуем поле или метод интерфейса, то по умолчанию он является закрытым.\n" + "К нему можно обратиться только через интерфейс, или явному приведению к интерфейсу\n" + "Или если нам нужно переопределить метод в базовом классе.\n" + "3.Реализация интерфейсов в базовых и прроизводных классов\n" + "Задача, создать метод в интерфейсе, в унаследуемом классе переопределить метод на abstract или virtual,\n" + "а после реализовать в классе, который унаследует предыдущий"); // Интерфейсы и преобразование типов IMovable movable = new Car("Porsh", 10, "drive"); Console.WriteLine(movable.ToString()); movable.Move(); Car car = (Car)movable; string moveName = ((Car)movable).TypeMove; Console.WriteLine(moveName); // Использование интерфейсов с методами класса BaseAction action1 = new HeroAction(); action1.Move(); // Move in BaseAction IAction action2 = new HeroAction(); action2.Move(); // Move in BaseAction // создание события с помощью интерфейса IMovable mov = new Car("Porsh", 10, "drive"); // подписываемся на событие mov.MoveEvent += (string value) => Console.WriteLine(value); mov.Move(); // Создание и переопределение метода или поля интерфейса в унаследованном классе. ICoin icoin = new Wallet(10, "USD", "25 cents"); icoin.ToString(); // Move in IAction Wallet wallet = new Wallet(10, "USD", "25 cents"); wallet.Info(); // Move in HeroAction // Использование обобщейний для интерфейсов CLClient client1 = new CLClient("Tom", 300); CLClient client2 = new CLClient("Олег", 200); var transaction = new NewTransaction <CLClient>(); transaction.Operate(client1, client2, 150); IProductTest <int> user1 = new ProductTest <int>(55); Console.WriteLine(user1._id); IProductTest <string> user2 = new ProductTest <string>("12345"); Console.WriteLine(user2._id); }