Пример полиморфизма C#

Идея полиморфизма заключается в подмене реализация одного и того же метода. Типичной фразой полиморфизм можно объяснить фразой "Один интерфейс, множество реализаций". В C# полиморфизм достигается за счет использования абстрактных и виртуальных методов. В теории все это дело понятно. Но как и главное когда использовать полиморфизм для новчиков становится серьезной проблемой. Данный пример призван улучшить понимание принципов полиморфизма и построения гибких программных конструкций.

Идея пример заключается в том, что у нас есть машины различных типов (Motobike, PassengerCar, Van, Minivan), каждая из которых может быть обсужена на заправке (GasStation) и при этом имеет различную вместительность топливного бака (полиморфизм). Все автомобили наследованы от базового класса Car, который в свою очередь реализует интерфейс ICar. Зависимости всех классов нашей системы показаны на диаграмме выше. Так-как вместительность бака (FuelLimit) помечена ключевым словом virtual, то любой класс наследник может переопределить его поведение. Это и происходит в классах наследниках (Motobike, Van). На вход заправки (GasStation) приходит параметр типа ICar, который может принимать различную форму (быть классами Motobike, Van), вот здесь и кроется полиморфизм.

Пример ICar и Car

/// <summary>
/// Define the general information about car
/// </summary>
interface ICar
{
	/// <summary>
	/// Max level of fuel in the tank
	/// </summary>
	int FuelLimit { get; }

	/// <summary>
	/// Current level of fuel in the tank
	/// </summary>
	int Fuel { get; set; }

	/// <summary>
	/// Name of the car
	/// </summary>
	string Name { get; }
}
abstract class Car : ICar
{
	public int Fuel { get; set; }

	public Car()
	{
		// all cars start with 20 units of fuel
		Fuel = 20;
	}

	/// <summary>
	/// Virtual, because we have default limit for any derived car. Derived car can ovveride or not this property
	/// </summary>
	public virtual int FuelLimit { get { return 50; } }

	/// <summary>
	/// Abstract, because derived class must ovveride
	/// </summary>
	public abstract string Name { get; }
}

Пример GasStation

class GasStation
{
	public void FillFuel(ICar car, int fuel)
	{
		if (car == null)
		{
			Console.WriteLine("Car is broken");
			return;
		}
		if (car.Fuel + fuel > car.FuelLimit)
		{
			Console.WriteLine($"Can't fill the {car.Name}, because limit {car.FuelLimit} achieved");
			return;
		}
		car.Fuel += fuel;
		Console.WriteLine($"{car.Name} was filled, current fuel level is {car.Fuel}");
	}
}

Пример заправки различных автомобилей

// array of cars
ICar[] cars = new ICar[]
{
	new Motobike(),
	new PassengerCar(),
	new Van()
};
// init gas station
GasStation gasStation = new GasStation();
// fill all availabe cars
foreach(ICar car in cars)
{
	gasStation.FillFuel(car, 23);
}

P.S. Очень важно, для запуска этого проекта вам потребуется Visual Studio 2015, так-как в проекте используются конструкции C# 6.0. 

Присоединяйся

Зарегестрируйся с помощью социальных сетей.

Публикуй

Опиши работу, прикрепи файлы и назначь цену.

Зарабатывай

Получай пассивный доход с продажи работ.

Тебе понадобится 5 минут для публикации работы на сайте.
Похожие работы
Скачать

бесплатно

1.2.4 - BA.Polymorphism And Inheritance.zip
45077
Оцени работу

рейтинг

Поделись работой с друзьями

Мы не грузим циферки, чтоб ты увидел контент как можно быстрее;

Комментарии (0)

dmytro

/ /

Оставить комментарий

Ты не можешь комментировать

Только зарегестрированые пользователи имеют возможность комментировать работы
Пример полиморфизма C#
Пример полиморфизма на различных видах машин и заправочной станции.
Категория: Образование
Стоимость: Бесплатно