Добро пожаловать в дикий и чудесный мир полиморфизма, мои коллеги-программисты! Полиморфизм — одна из фундаментальных концепций объектно-ориентированного программирования (ООП), позволяющая использовать единый интерфейс для представления нескольких типов объектов. Это похоже на волшебство, но с меньшим количеством взмахов палочкой и большим набором кода.

В C# полиморфизм достигается за счет использования ключевых слов virtual и override, классов abstract и interface.

Начнем с virtual override ключевых слов. Ключевое слово virtual используется для указания того, что метод или свойство можно переопределить в производном классе. Например, предположим, что у нас есть базовый класс под названием «Животное» с виртуальным методом под названием «Говори()».

public class Animals
{
    public virtual void Speak()
    {
        Console.WriteLine("Animal can't speak.");
    }
}

Допустим, у нас есть производный класс «Собаки», который наследуется от класса «Животные». Мы можем переопределить метод «Speak()» в классе «Dogs», чтобы заставить собак лаять.

class Dogs : Animals
{
    public override void Speak()
    {
        Console.WriteLine("Woof woof");
    }
}

Теперь, если мы создадим экземпляр класса «Собаки» и вызовем метод «Говори()», он напечатает «Гав-гав» вместо «Животные не могут говорить».

Классы abstract также являются способом достижения полиморфизма в C#. Класс abstract — это класс, который не может быть создан и должен быть унаследован другим классом. Класс abstract может содержать abstract методов и свойств, то есть методов и свойств, которые не имеют реализации и должны быть переопределены в производных классах.

public abstract class Shape
{
    public abstract double GetArea();
}

public class Circle : Shape
{
    private double radius;
    public Circle(double radius)
    {
        this.radius = radius;
    }
    public override double GetArea()
    {
        return Math.PI * Math.Pow(radius, 2);
    }
}

Наконец, interface — это еще один способ добиться полиморфизма в C#. interface — это план класса, он определяет набор методов и свойств, которые должен реализовать класс. Несколько классов могут реализовывать интерфейс, а класс может реализовывать несколько интерфейсов.

public interface IRunnable
{
    void Run();
}

public interface IFlyable
{
    void Fly();
}

public class Airplane : IRunnable, IFlyable
{
    public void Run()
    {
        Console.WriteLine("Airplanes can't run.");
    }
    public void Fly()
    {
        Console.WriteLine("Airplanes can fly.");
    }
}

Если вы нашли эту статью полезной, похлопайте ей в ладоши.

Приготовьтесь смеяться, учиться и, возможно, даже плакать (от разочарования), пока мы погружаемся в дикий мир объектно-ориентированного программирования на C#. Пристегнитесь, ребята, потому что эта серия будет дикой поездкой для понимания фундаментальных концепций. Так что сядьте поудобнее, расслабьтесь и позвольте хорошим временам идти своим чередом (и кодом).

Классы и объекты, Наследование, Абстракция, Инкапсуляция, Полиморфизм, Интерфейсы, Модификаторы и свойства доступа, Обработка исключений, Универсальные шаблоны, Конструкторы, Делегаты и события.

Отказ от ответственности: часть этой статьи была написана с помощью инструмента искусственного интеллекта.
Но автор просмотрел и отредактировал содержимое.