Sobes.tech
Junior

Da li ste koristili apstraktne klase u svojim projektima?

sobes.tech АИ

Одговор од АИ

Da, koristio sam. Apstraktne klase su se koristile za kreiranje osnovnih struktura sa zajedničkim metodama i svojstvima, koje zatim nasledjuju konkretne klase.

// Deklaracija apstraktne klase
public abstract class Shape
{
    // Apstraktna metoda koja mora biti implementirana u izvedenim klasama
    public abstract double GetArea();

    // Virtuelna metoda sa podrazumevanom implementacijom, koja se može prepisati
    public virtual void Draw()
    {
        Console.WriteLine("Crtanje oblika.");
    }
}

// Konkretna klasa koja nasledjuje od Shape
public class Circle : Shape
{
    public double Radius { get; set; }

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

    // Implementacija apstraktne metode
    public override double GetArea()
    {
        return Math.PI * Radius * Radius;
    }

    // Prepisivanje virtuelne metode
    public override void Draw()
    {
        Console.WriteLine($"Crtanje kruga sa poluprečnikom {Radius}.");
    }
}

Glavni scenariji upotrebe:

  • Definisanje opšteg ugovora: Apstraktne klase omogućavaju da se odredi skup metoda i svojstava koji moraju biti prisutni u svim izvedenim klasama.
  • Delimična implementacija: Mogućnost pružanja delimične implementacije funkcionalnosti u osnovnoj klasi, izbegavajući potpunu duplikaciju koda u izvedenim klasama.
  • Dizajnerski obrazac: Često se koriste u implementaciji obrazaca, kao što je "Šablonska metoda".

Razlike u odnosu na interfejse:

Osobina Apstraktna klasa Interfejs
Nasleđivanje Višestruko nasleđivanje nije dozvoljeno Višestruka implementacija dozvoljena
Implementacija Može sadržavati implementacije metoda Do C# 8.0 - samo deklaracije, nakon toga - podrazumevane implementacije
Članovi Može imati polja, konstruktore, virtuelne/abstraktne/obične metode Do C# 8.0 - samo metode i svojstva, nakon toga - takođe statički članovi i podrazumevane implementacije
Stanje Može imati stanje (kroz polja) Ne može imati stanje