Interfejsy w C
1. Wprowadzenie
- Interfejs to kontrakt, który definiuje zestaw metod, właściwości, zdarzeń lub indeksatorów bez implementacji.
- Klasy implementujące interfejs muszą dostarczyć implementację wszystkich jego członków.
- Interfejsy umożliwiają:
- Polimorfizm – różne klasy mogą być traktowane jako ten sam typ,
- Rozdzielenie definicji od implementacji,
- Wielokrotne dziedziczenie – klasa może implementować wiele interfejsów.
- Nazwy interfejsów w C# zazwyczaj zaczynają się od
I(np.IComparable,IEnumerable).
2. Definicja interfejsu
Składnia:
Przykład:
3. Implementacja interfejsu
- Klasa implementuje interfejs za pomocą operatora
:. - Musi dostarczyć implementację wszystkich członków interfejsu.
4. Używanie interfejsów
- Obiekty różnych klas mogą być traktowane jako ten sam typ interfejsu.
5. Wielokrotne implementowanie interfejsów
- Klasa może implementować wiele interfejsów jednocześnie.
- W C# nie ma dziedziczenia wielokrotnego, ale można implementować wiele interfejsów.
6. Interfejsy a klasy abstrakcyjne
| Cecha | Interfejs | Klasa abstrakcyjna |
|---|---|---|
| Implementacja metod | Brak (do C# 8) lub domyślna (C# 8+) | Może zawierać metody z implementacją |
| Dziedziczenie wielokrotne | Klasa może implementować wiele | Klasa może dziedziczyć tylko jedną |
| Pola | Nie może zawierać pól | Może zawierać pola |
| Modyfikatory dostępu | Wszystkie członki są publiczne | Może mieć różne modyfikatory |
| Konstruktory | Nie posiada | Może posiadać konstruktory |
| Zastosowanie | Definiowanie kontraktu | Baza dla powiązanych klas |
7. Właściwości w interfejsach
8. Implementacja jawna interfejsu
- Implementacja jawna pozwala na implementację metod o tej samej nazwie z różnych interfejsów.
- Metody zaimplementowane jawnie są dostępne tylko przez referencję interfejsu.
9. Dziedziczenie interfejsów
- Interfejsy mogą dziedziczyć z innych interfejsów.
10. Domyślne implementacje w interfejsach (C# 8.0+)
- Od C# 8.0 interfejsy mogą zawierać domyślne implementacje metod.
- Klasy mogą, ale nie muszą, przesłaniać tych metod.
11. Interfejsy wbudowane w .NET
11.1. IEnumerable i IEnumerable<T>
- Umożliwiają iterację po kolekcji za pomocą
foreach.
11.2. IComparable i IComparable<T>
- Pozwalają na porównywanie i sortowanie obiektów.
11.3. IDisposable
- Używany do zwalniania zasobów niezarządzanych.
12. Polimorfizm z interfejsami
13. Przykładowy program
Wynik:
Metoda płatności: Karta kredytowa
Płacę 100,50 zł kartą 1234-5678-9012-3456
Metoda płatności: PayPal
Płacę 250,00 zł przez PayPal (user@example.com)
14. Najlepsze praktyki
- Nazywaj interfejsy z prefiksem
I(np.IZwierze,ILogger). - Stosuj interfejsy do definiowania kontraktów między komponentami.
- Preferuj interfejsy nad klasami abstrakcyjnymi, gdy nie potrzebujesz implementacji.
- Używaj małych, skoncentrowanych interfejsów (Interface Segregation Principle).
- Interfejsy ułatwiają testowanie – można łatwo tworzyć mocki.
- Nie dodawaj zbyt wielu metod do jednego interfejsu – lepiej podzielić na mniejsze.
15. Podsumowanie
- Interfejs to kontrakt definiujący metody bez implementacji.
- Klasa może implementować wiele interfejsów.
- Interfejsy wspierają polimorfizm i rozdzielenie definicji od implementacji.
- Od C# 8.0 interfejsy mogą mieć domyślne implementacje.
- Interfejsy są podstawą wielu wzorców projektowych i technik programowania.