Sobes.tech
Junior

Czy używałeś klas abstrakcyjnych w swoich projektach?

sobes.tech AI

Odpowiedź od AI

Tak, używałem tego. Klasy abstrakcyjne służyły do tworzenia podstawowych struktur z metodami i właściwościami wspólnymi, które następnie są dziedziczone przez konkretne klasy.

// Deklaracja klasy abstrakcyjnej
public abstract class Shape
{
    // Metoda abstrakcyjna, którą muszą zaimplementować klasy dziedziczące
    public abstract double GetArea();

    // Metoda wirtualna z domyślną implementacją, którą można nadpisać
    public virtual void Draw()
    {
        Console.WriteLine("Rysowanie kształtu.");
    }
}

// Konkretna klasa dziedzicząca po Shape
public class Circle : Shape
{
    public double Radius { get; set; }

    public Circle(double radius)
    {
        Radius = radius;
    }

    // Implementacja metody abstrakcyjnej
    public override double GetArea()
    {
        return Math.PI * Radius * Radius;
    }

    // Nadpisanie metody wirtualnej
    public override void Draw()
    {
        Console.WriteLine($"Rysowanie koła o promieniu {Radius}.");
    }
}

Główne scenariusze użycia:

  • Definiowanie ogólnego kontraktu: Klasy abstrakcyjne pozwalają na zdefiniowanie zestawu metod i właściwości, które muszą występować we wszystkich klasach pochodnych.
  • Częściowa implementacja: Możliwość dostarczenia częściowej implementacji funkcjonalności w klasie bazowej, unikając pełnej duplikacji kodu w klasach dziedziczących.
  • Wzorzec projektowy: Często używane w implementacji wzorców, takich jak "Metoda szablonowa".

Różnice w porównaniu do interfejsów:

Cecha Klasa abstrakcyjna Interfejs
Dziedziczenie Dziedziczenie wielokrotne zabronione Wielokrotna implementacja dozwolona
Implementacja Może zawierać implementację metod Do C# 8.0 - tylko deklaracje, po tym - domyślne implementacje
Członkowie Może mieć pola, konstruktory, metody wirtualne/abstrakcyjne/normalne Do C# 8.0 - tylko metody i właściwości, po tym - także członkowie statyczni i domyślne implementacje
Stan Może mieć stan (przez pola) Nie może mieć stanu