V akých prípadoch a na aké účely používame rozhrania v C#?
sobes.tech AI
Odpoveď od AI
Rozhrania v jazyku C# slúžia na nasledujúce účely:
-
Definovanie zmluvy: Rozhranie definuje súbor členov (metódy, vlastnosti, udalosti, indexátory), ktoré trieda alebo štruktúra implementujúca toto rozhranie musí implementovať. To zabezpečuje jednotnosť správania rôznych typov.
// Definovanie rozhrania public interface IDrawable { void Draw(); int LineThickness { get; set; } } // Trieda, ktorá implementuje rozhranie public class Circle : IDrawable { public int LineThickness { get; set; } public void Draw() { // Logika kreslenia kruhu } } -
Polymorfizmus: Použitie rozhraní umožňuje pracovať s objektmi rôznych typov cez spoločný rozhraníový typ. Toho sa dosahuje tak, že akákoľvek referencia na objekt, ktorý implementuje rozhranie, môže byť prevedená na tento typ rozhrania.
// Metóda, ktorá pracuje s akýmkoľvek objektom implementujúcim IDrawable public void Render(IDrawable item) { item.Draw(); // Volanie konkrétnej implementácie metódy Draw } // Použitie: IDrawable circle = new Circle(); Render(circle); // Bude zavolaná implementácia Draw() z triedy Circle -
Viacnásobné dedičstvo (Multiple Inheritance): C# nepodporuje dedičstvo tried viac ako jednej, ale umožňuje triede alebo štruktúre implementovať viac rozhraní. To umožňuje typu mať správanie definované v rôznych "zmluvách".
public interface ISaveable { void Save(); } public interface ILoadable { void Load(); } // Trieda, ktorá implementuje viac rozhraní public class ConfigurationManager : ISaveable, ILoadable { public void Save() { // Logika ukladania } public void Load() { // Logika načítania } } -
Slabé prepojenie (Decoupling): Použitie rozhraní znižuje závislosť medzi komponentami. Namiesto závislosti od konkrétnej triedy môže komponent závisieť od rozhrania. To uľahčuje výmenu implementácií a testovanie.
public interface ILogger { void LogMessage(string message); } public class FileLogger : ILogger { public void LogMessage(string message) { // Logika zápisu do súboru } } public class DatabaseLogger : ILogger { public void LogMessage(string message) { // Logika zápisu do databázy } } public class ProcessingEngine { private readonly ILogger _logger; // Závislosť od rozhrania, nie od konkrétnej implementácie public ProcessingEngine(ILogger logger) { _logger = logger; } public void ProcessData() { // ... _logger.LogMessage("Dáta spracované."); } } -
Rozšíriteľnosť: Rozhrania umožňujú ľahké pridávanie nových implementácií existujúceho správania bez zmeny kódu, ktorý používa toto rozhranie.
-
Dokumentácia a samodokumentovanie: Dobre pomenované rozhranie s komentármi ku svojim členom slúži ako forma dokumentácie, opisujúca, aké správanie sa očakáva od objektov implementujúcich toto rozhranie.