0Pricing
C# Academy · Урок

Полиморфизм и переопределение методов

Освойте полиморфизм, чтобы создавать гибкий и повторно используемый код с помощью переопределения методов

«Полиморфизм и переопределение методов» — бесплатный урок C# Academy на CoddyKit. Это урок 7 из 7. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 7 уроков всего.

Введение в полиморфизм

Полиморфизм и переопределение методов

Добро пожаловать в следующий урок! В этом уроке вы узнаете о полиморфизме — важной концепции объектно-ориентированного программирования, которая позволяет переопределять методы для создания гибкого и повторно используемого кода. Давайте начнём!

Полиморфизм и переопределение методов — иллюстрация 1

Что такое полиморфизм?

Что такое полиморфизм?

Полиморфизм означает «многообразие форм» и позволяет обращаться с объектами разных классов как с объектами общего базового класса. Это делает код более гибким и позволяет повторно его использовать.

Пример: Метод может вести себя по-разному в зависимости от типа объекта, с которым он работает.

Ключевой момент: В C# полиморфизм достигается с помощью переопределения методов и интерфейсов.

Понимание переопределения методов

Понимание переопределения методов

Переопределение методов позволяет производному классу предоставить особую реализацию метода, уже определённого в базовом классе. Используйте ключевое слово virtual в базовом классе и ключевое слово override в производном классе. Пример:

Совет: Переопределение методов гарантирует, что для объекта будет вызван правильный метод независимо от типа ссылки на него.

using System;

class Animal {
    public virtual void Speak() {
        Console.WriteLine("The animal makes a sound.");
    }
}

class Dog : Animal {
    public override void Speak() {
        Console.WriteLine("The dog barks.");
    }
}

class Cat : Animal {
    public override void Speak() {
        Console.WriteLine("The cat meows.");
    }
}

class Program {
    static void Main() {
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        myDog.Speak(); // Outputs: The dog barks.
        myCat.Speak(); // Outputs: The cat meows.
    }
}

Использование полиморфизма

Использование полиморфизма

Полиморфизм позволяет писать код, работающий с объектами разных типов через общий интерфейс. Пример:

Ключевой момент: Полиморфизм позволяет писать более универсальный и повторно используемый код.

using System;

class Animal {
    public virtual void Speak() {
        Console.WriteLine("The animal makes a sound.");
    }
}

class Dog : Animal {
    public override void Speak() {
        Console.WriteLine("The dog barks.");
    }
}

class Cat : Animal {
    public override void Speak() {
        Console.WriteLine("The cat meows.");
    }
}

class Program {
    static void Main() {
        Animal[] animals = { new Dog(), new Cat() };

        foreach (Animal animal in animals) {
            animal.Speak(); // Calls the appropriate method for each object
        }
    }
}

Использование базового ключевого слова при переопределении

Использование базового ключевого слова при переопределении

Ключевое слово base используется для вызова метода базового класса из переопределённого метода. Пример:

Совет: Используйте base, если хотите сохранить функциональность базового класса в переопределённом методе.

using System;

class Animal {
    public virtual void Speak() {
        Console.WriteLine("The animal makes a sound.");
    }
}

class Dog : Animal {
    public override void Speak() {
        base.Speak(); // Calls the base class method
        Console.WriteLine("The dog barks.");
    }
}

class Program {
    static void Main() {
        Dog myDog = new Dog();
        myDog.Speak(); // Outputs: The animal makes a sound. The dog barks.
    }
}

Абстрактные классы и методы

Абстрактные классы и методы

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

Ключевой момент: Абстрактные методы требуют, чтобы производные классы предоставляли собственную реализацию.

using System;

abstract class Animal {
    public abstract void Speak(); // Abstract method
}

class Dog : Animal {
    public override void Speak() {
        Console.WriteLine("The dog barks.");
    }
}

class Program {
    static void Main() {
        Animal myDog = new Dog();
        myDog.Speak(); // Outputs: The dog barks.
    }
}

Практическое задание

Практическое задание

Создайте абстрактный класс Shape с абстрактным методом CalculateArea(). Создайте производные классы Rectangle и Circle, реализующие метод CalculateArea(). Пример:

using System;

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

class Rectangle : Shape {
    public double Width { get; set; }
    public double Height { get; set; }

    public override double CalculateArea() {
        return Width * Height;
    }
}

class Circle : Shape {
    public double Radius { get; set; }

    public override double CalculateArea() {
        return Math.PI * Radius * Radius;
    }
}

class Program {
    static void Main() {
        Shape rectangle = new Rectangle { Width = 4, Height = 5 };
        Shape circle = new Circle { Radius = 3 };

        Console.WriteLine("Rectangle Area: " + rectangle.CalculateArea());
        Console.WriteLine("Circle Area: " + circle.CalculateArea());
    }
}

Рекомендации по полиморфизму

Рекомендации по полиморфизму

Вот несколько рекомендаций:

  • Используйте полиморфизм, чтобы упростить код и избежать дублирования.
  • Переопределяйте только те методы, которым требуется особое поведение в производных классах.
  • Используйте абстрактные классы и методы для общих интерфейсов производных классов.

Совет: Полиморфизм упрощает расширение и сопровождение кода.

Отличная работа!

Отличная работа!

Поздравляем! Вы научились использовать полиморфизм и переопределение методов для написания гибкого и повторно используемого кода. В следующем уроке мы рассмотрим работу с интерфейсами, чтобы добиться абстракции и реализовать несколько вариантов поведения. Продолжайте программировать!

Полиморфизм и переопределение методов — иллюстрация 10

Часто задаваемые вопросы

Урок «Полиморфизм и переопределение методов» бесплатный?

Да — полный текст урока «Полиморфизм и переопределение методов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 7 уроков всего.

Чему я научусь в уроке «Полиморфизм и переопределение методов»?

Освойте полиморфизм, чтобы создавать гибкий и повторно используемый код с помощью переопределения методов Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 7 из 7.

Сколько времени занимает урок «Полиморфизм и переопределение методов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Что такое объектно-ориентированное программирование?
  2. Определение классов и объектов
  3. Свойства и методы
  4. Конструкторы в C#
  5. Инкапсуляция и модификаторы доступа
  6. Наследование: повторное использование кода
  7. Полиморфизм и переопределение методов
← Назад к C# Academy