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 |