Делаем добро вместе Детальнее

Урок #20 – Виртуальные методы

Урок #20 – Виртуальные методы

Виртуальные методы – свойство языка C# за счет которого мы получаем возможность переопределения родительского функционала. За урок мы научимся использовать ключевые слова «virtual» и «override», а также познакомимся с ними на практике.

Видеоурок

Полиморфизм является одной из концепций объектно ориентированного программирования. Благодаря полиморфизму мы можем переопределять методы родительского класса в классах наследниках.


Зачем нужен полиморфизм?

Предположим что у нас есть один большой класс «Транспорт». В нём прописаны методы:

  • вывод всей информации;
  • установка полей класса;
  • запуск двигателя (на данный момент выводит лишь текст про запуск двигателя).


На основе класса мы создаем два класса наследника: «Car» и «Airplane». В каждом из классов-наследников мы будем иметь доступ ко всем методам из класса «Транспорт».


Мы явно понимаем, что метод «запуск двигателя» должен иметь разную реализацию у двух классов. Как мы можем заменить методы:

  1. Можем создать в каждом классе новые методы, что будут релевантны конкретному классу. Из минусов то, что каждый метод будет иметь новое название и нам сложно будет запомнить все названия методов для всех классов;
  2. Можем создать переопределение методов. Для этого необходимо прописать такое же имя как в главном классе и далее прописать новое содержимое для метода. Получается явный плюс, так как теперь повсюду используется одно имя и в зависимости от разных классов будет вызываться разный метод, но под одним и тем же именем.


В ООП вы можете переопределять неограниченное количество методов и указывать для них новые свойства и действия.


Реализация программы

Пример реализации виртуальных методов приведен ниже:

using System;

namespace ProjectOne {
	class Shape {
		public virtual void saysSomething () {
			Console.Write("No! ");
		}
	}

	class Square : Shape {
		public override void saysSomething () {
			base.saysSomething ();
			Console.Write("But I will say something!");
		}
	}


	class MainClass {
		public static void Main(String[] args) {
			Square test = new Square();
			test.saysSomething (); // Будет выведено - "No! But I will say something!"
		}
	}
}

Для создания подобных методов необходимо прописать в главном классе ключевое слово virtual перед типом данных, а в классах наследнике слово override.

Исходный код

Основной класс
using System;

namespace project {

    class Program {

        static void Main() {
            Robot bot = new Robot("Bot", 800, new byte[] {0, 0, 0});
            bot.printValues();

            Killer killer = new Killer("Killer", 1000, new byte[] {0, 0, 10}, 100);
            killer.printValues();
            killer.Lazer();

            Robot bot1 = new Robot("Bot");
            bot1.Weight = -100;
        }

    }

}
Посмотреть остальной код можно после подписки на проект!

Задание к уроку

Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям

Большое задание по курсу

Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца

Также стоит посмотреть

Уроки C# под Unity 5 для начинающих
9 уроков
Изучение C#, ASP.NET и создание Windows программ
Изучение ASP.NET Core MVC. Создание сайтов на C#
10 уроков
Программа на C# .NET Windows Forms
7 уроков
Изучение C# WPF на практике. Создание программ на C#
10 уроков
Комментарии для сайта Cackle