0Pricing
C# Academy · Урок

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

Используйте полиморфизм на основе интерфейсов: единообразно обрабатывайте смешанные фигуры, добавляйте новые фигуры без изменения вызывающего кода и объединяйте небольшие варианты поведения.

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

Обзор полиморфизма

Цель: использовать полиморфизм, чтобы упростить вызывающий код.

  • Повсюду работайте с IShape
  • Храните разные фигуры в одном списке
  • Добавляйте новые фигуры без изменения существующего кода
  • Объединяйте небольшие виды поведения (форматирование, фильтрация)

Один интерфейс для всех фигур

Принимайте интерфейс IShape во вспомогательных средствах. Диспетчеризация во время выполнения выбирает нужную реализацию.

using System;

public interface IShape
{
  double Area();
  double Perimeter();
}

public sealed class Rectangle : IShape
{
  private readonly double _w, _h;
  public Rectangle(double w, double h) { _w = w; _h = h; }
  public double Area() { return _w * _h; }
  public double Perimeter() { return 2 * (_w + _h); }
}

public sealed class Circle : IShape
{
  private readonly double _r;
  public Circle(double r) { _r = r; }
  public double Area() { return 3.14159 * _r * _r; }
  public double Perimeter() { return 2 * 3.14159 * _r; }
}

public class Program
{
  // One function works for any IShape (dynamic dispatch on overrides)
  static void PrintSummary(IShape s)
  {
    Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter());
  }

  public static void Main(string[] args)
  {
    PrintSummary(new Rectangle(3, 4));
    PrintSummary(new Circle(2));
  }
}

Обработка смешанного списка

Храните множество фигур в списке <IShape>. Перебор остаётся простым, а поведение меняется в зависимости от экземпляра.

using System;
using System.Collections.Generic;

public interface IShape { double Area(); double Perimeter(); }

public sealed class Rectangle : IShape
{
  private readonly double _w, _h;
  public Rectangle(double w, double h) { _w = w; _h = h; }
  public double Area() { return _w * _h; }
  public double Perimeter() { return 2 * (_w + _h); }
}

public sealed class Circle : IShape
{
  private readonly double _r;
  public Circle(double r) { _r = r; }
  public double Area() { return 3.14159 * _r * _r; }
  public double Perimeter() { return 2 * 3.14159 * _r; }
}

public class Program
{
  public static void Main(string[] args)
  {
    List<IShape> shapes = new List<IShape>();
    shapes.Add(new Rectangle(2, 5));
    shapes.Add(new Circle(1.5));
    shapes.Add(new Rectangle(1, 1));

    foreach (IShape s in shapes)
    {
      Console.WriteLine("A=" + s.Area());
    }
  }
}

Открытость для расширения

Полиморфизм поддерживает открытое расширение: новые фигуры подключаются без изменения существующего вызывающего кода.

using System;

public interface IShape { double Area(); double Perimeter(); }

public sealed class Triangle : IShape
{
  private readonly double _a, _b, _c;
  public Triangle(double a, double b, double c) { _a = a; _b = b; _c = c; }
  public double Perimeter() { return _a + _b + _c; }
  public double Area()
  {
    double s = (_a + _b + _c) / 2.0;
    return Math.Sqrt(s * (s - _a) * (s - _b) * (s - _c));
  }
}

public class Program
{
  // Existing helper still works; no changes needed
  static void Show(IShape s) { Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter()); }

  public static void Main(string[] args)
  {
    Show(new Triangle(3, 4, 5)); // new type plugs in
  }
}

Композиция поведения (стратегия)

Объединяйте небольшие виды поведения через малые интерфейсы (например, форматировщик). Меняйте стратегии, не изменяя фигуру.

using System;

public interface IShape { double Area(); double Perimeter(); }

public sealed class Rectangle : IShape
{
  private readonly double _w, _h;
  public Rectangle(double w, double h) { _w = w; _h = h; }
  public double Area() { return _w * _h; }
  public double Perimeter() { return 2 * (_w + _h); }
}

// Small strategy interface for formatting
public interface IShapeFormatter
{
  string Format(IShape s);
}

public sealed class SimpleFormatter : IShapeFormatter
{
  public string Format(IShape s) { return "A=" + s.Area() + " P=" + s.Perimeter(); }
}

public class Program
{
  static void Print(IShape s, IShapeFormatter f)
  {
    Console.WriteLine(f.Format(s));
  }

  public static void Main(string[] args)
  {
    Print(new Rectangle(3, 2), new SimpleFormatter());
  }
}

Советы по полиморфизму

Советы:

  • Передавайте во вспомогательные средства IShape; избегайте проверок типов.
  • По возможности делайте вспомогательные средства небольшими и чистыми.
  • Свободно добавляйте новые фигуры; не изменяйте существующий вызывающий код.
  • Используйте небольшие интерфейсы поведения (форматирование, фильтрация) для расширения возможностей.

Преимущество интерфейса

Быстрая проверка: в чём главное преимущество программирования через интерфейс IShape в этой библиотеке?

Повторение

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Проектирование (интерфейсы и наследование)
  2. Реализация и тесты
  3. Полиморфное поведение
← Назад к C# Academy