0Pricing
C# Academy · Lekcja

Zachowania polimorficzne

Korzystaj z polimorfizmu opartego na interfejsach: przetwarzaj różne kształty w jednolity sposób, dodawaj nowe kształty bez zmiany kodu wywołującego i łącz małe zachowania.

Zachowania polimorficzne to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 3 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.

Przegląd polimorfizmu

Cel: Używaj polimorfizmu, aby uprościć kod wywołujący.

  • Wszędzie pracuj z IShape
  • Łącz wiele kształtów na jednej liście
  • Dodawaj nowe kształty bez zmieniania istniejącego kodu
  • Komponuj małe zachowania (formatowanie, filtrowanie)

Jedno API dla wszystkich kształtów

Przyjmuj interfejs IShape w metodach pomocniczych. Wybór implementacji w czasie wykonywania wskaże właściwą implementację.

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));
  }
}

Przetwarzanie mieszanej listy

Przechowuj wiele kształtów na liście List<IShape>. Iteracja pozostaje prosta, a zachowanie zależy od konkretnej instancji.

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());
    }
  }
}

Otwartość na rozszerzenia

Polimorfizm wspiera rozszerzanie bez modyfikacji: nowe kształty można integrować bez edytowania istniejącego kodu wywołującego.

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
  }
}

Kompozycja zachowań (strategia)

Łącz małe zachowania za pomocą niewielkich interfejsów, takich jak formatter. Zmieniaj strategie bez modyfikowania kształtu.

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());
  }
}

Wskazówki dotyczące polimorfizmu

Wskazówki:

  • Przekazuj IShape do metod pomocniczych; unikaj sprawdzania typów.
  • W miarę możliwości twórz małe i czyste metody pomocnicze.
  • Swobodnie dodawaj nowe kształty; nie modyfikuj istniejącego kodu wywołującego.
  • Używaj małych interfejsów zachowania (formatowanie, filtrowanie), aby rozszerzać funkcje.

Korzyść z interfejsu

Szybkie sprawdzenie: Jaka jest główna korzyść z programowania z użyciem interfejsu IShape w tej bibliotece?

Podsumowanie

Podsumowanie: Przyjmuj parametry typu IShape, przetwarzaj mieszane listy i dodawaj kształty bez modyfikowania kodu wywołującego. Komponuj małe zachowania na potrzeby formatowania lub filtrowania, aby zachować elastyczność kodu.

Często zadawane pytania

Czy lekcja „Zachowania polimorficzne” jest bezpłatna?

Tak — pełny tekst „Zachowania polimorficzne” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Zachowania polimorficzne”?

Korzystaj z polimorfizmu opartego na interfejsach: przetwarzaj różne kształty w jednolity sposób, dodawaj nowe kształty bez zmiany kodu wywołującego i łącz małe zachowania. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 3.

Ile czasu zajmuje lekcja „Zachowania polimorficzne”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Projektowanie (interfejsy i dziedziczenie)
  2. Implementacja i testy
  3. Zachowania polimorficzne
← Powrót do C# Academy