Skip to content

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 implementacji
interface IVehicle
{
void Drive();
int Speed { get; }
}
// klasa implementuje interfejs i musi dostarczyć jego składowe
class 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 implementuje
IVehicle vehicle = new Car();
// kod operuje na interfejsie, nie znając konkretnej klasy
vehicle.Drive(); // wywoła się implementacja z klasy Car

Wiele 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.