Zadanie 16
Czym jest interfejs, jego zastosowanie i przeznaczenie
Interfejs to kontrakt definiujący zestaw metod, własności lub zdarzeń, które klasa go implementująca musi udostępnić. Interfejs nie zawiera implementacji, a jedynie sygnatury. Określa “co” obiekt potrafi, nie “jak” to robi.
Interfejsy umożliwiają polimorfizm i luźne powiązania między elementami systemu, bo kod może operować na interfejsie, nie znając konkretnej klasy. Pozwalają też obejść brak wielodziedziczenia klas w C#, ponieważ klasa może implementować dowolnie wiele interfejsów. Nazwy interfejsów zwyczajowo zaczyna się od dużej litery I (np. IVehicle, IDisposable).
// interfejs - tylko sygnatury, bez implementacjiinterface IVehicle{ void Drive(); int Speed { get; }}
// klasa implementuje interfejs i musi dostarczyć jego składoweclass Car : IVehicle{ public void Drive() { Console.WriteLine("Jadę"); }
public int Speed { get; } = 100;}Polimorfizm - kluczowa zaleta:
// zmienna typu interfejsu może wskazywać obiekt dowolnej klasy, która go implementujeIVehicle vehicle = new Car();
// kod operuje na interfejsie, nie znając konkretnej klasyvehicle.Drive(); // wywoła się implementacja z klasy CarWiele interfejsów:
// klasa implementuje kilka interfejsów naraz (po przecinku)class Duck : IFlying, ISwimming{ // implementacje metod z IFlying i ISwimming}Wśród wbudowanych interfejsów .NET często spotyka się: IEnumerable (iteracja foreach), IDisposable (zwalnianie zasobów, Dispose), IComparable (porównywanie i sortowanie) oraz IEquatable (porównywanie równości).
Skrót do zapamiętania: Interfejs to kontrakt (sygnatury bez implementacji) mówiący “co” klasa potrafi. Daje polimorfizm, luźne powiązania i pozwala implementować wiele interfejsów (obejście braku wielodziedziczenia).
- Kontrakt: zestaw składowych do zaimplementowania, bez ciała.
- Klasa musi dostarczyć implementację wszystkich składowych; nazwy z prefiksem I.
- Wiele interfejsów na klasę -> obejście braku wielodziedziczenia.
- Daje polimorfizm i luźne powiązania (programowanie pod interfejs).
- Wbudowane: IEnumerable, IDisposable, IComparable, IEquatable.