Sobes.tech
Junior — Middle

V čem spočívá rozdíl mezi použitím abstraktní třídy a rozhraní při definování smluv pro třídy?

sobes.tech AI

Odpověď od AI

Abstraktní třída a rozhraní v C# slouží k definování kontraktů, ale mají klíčové rozdíly:

  • Abstraktní třída může obsahovat implementace metod, polí, konstruktorů a vlastností. Používá se, když je potřeba stanovit základní implementaci a společnou funkcionalitu pro dědice.
  • Rozhraní definuje pouze podpisy metod, vlastností a událostí bez implementace (do C# 8.0; od C# 8.0 mohou rozhraní obsahovat výchozí implementace).

Navíc, třída může dědit pouze od jedné abstraktní třídy, ale může implementovat více rozhraní.

Příklad:

abstract class Animal
{
    public abstract void MakeSound();
    public void Sleep() { Console.WriteLine("Spí"); }
}

interface IFlyable
{
    void Fly();
}

class Bird : Animal, IFlyable
{
    public override void MakeSound() { Console.WriteLine("Píp"); }
    public void Fly() { Console.WriteLine("Letí"); }
}

Tímto způsobem je abstraktní třída vhodná pro společné základní chování, a rozhraní pro definování sady schopností, které mohou být implementovány různými třídami.