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

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

ООП состоит из нескольких базовых принципов и концепций. В ходе урока мы рассмотрим одну из концепций, что называется полиморфизм. Мы научимся использовать полиморфизм в классах и узнаем что это такое в языке C#.

Видеоурок

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


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

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

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


На основе класса мы создаем два класса наследника: «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;
using System.Collections.Generic;

namespace ProjectOne {

	class Animal {
		public string Name { get; set; }

		public Animal (string name) {
			Name = name;
		}

		public virtual void Print () {
			Console.WriteLine (Name);
		}
	}

	class Dog : Animal {

		private float speed;

		public Dog (float speed, string name) : base (name) {
			this.speed = speed;
		}

		public override void Print () {
			base.Print ();
			Console.WriteLine ("Dog speed: " + speed);
		}
	}

	class Cat : Animal {

		private float speed;

		public Cat (float speed, string name) : base (name) {
			this.speed = speed;
		}

		public override void Print () {
			base.Print ();
			Console.WriteLine ("Cat speed: " + speed);
		}
	}

	class MainClass {
		
		public static void Main (string[] args) {			

			List<Animal> animals = new List<Animal> ();
			animals.Add (new Dog (12.23f, "Alex"));
			animals.Add (new Dog (12.3f, "Tom"));
			animals.Add (new Cat (12.3f, "Meow"));

			foreach (Animal animal in animals) {
				animal.Print ();
			}

			Console.ReadKey ();
		}
	}
}

Онлайн редактор кода

Загрузка...

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

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

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

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

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

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