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.