1. Wprowadzenie do C#
  2. Szybki start
  3. Pierwszy program
  4. Komentarze
  5. Typy danych
  6. Zmienne
  7. Pola
  8. Właściwości
  9. Stałe
  10. Metody
  11. Instrukcje warunkowe
  12. Pętle
  13. Tablice
  14. Kolekcje
  15. Klasy
  16. Dziedziczenie
  17. Polimorfizm
  18. Konwersja typów
  19. Właściwości klasy String
  20. Typy wyliczeniowe
  21. Interfejsy
  22. Klasy statyczne
  23. Klasy Abstrakcyjne
  24. Przestrzenie nazw
  25. Wyjątki
  26. Typy generyczne
  27. JSON
  28. XML
  29. Podsumowanie

Interfejsy

Interfejsy w języku C# pozwalają na tworzenie abstrakcyjnych kontraktów, które określają, jakie metody, właściwości i zdarzenia musi zaimplementować klasa lub struktura. Interfejs jest typem referencyjnym i nie można tworzyć obiektów na podstawie interfejsu. Zamiast tego, klasy lub struktury muszą zaimplementować interfejs, aby móc go używać. Interfejsy służą głównie do polimorfizmu i dziedziczenia wielokrotnego.

Interfejsy w języku C# deklaruje się za pomocą słowa kluczowego interface po czym następuje nazwa interfejsu.

								
public interface NazwaInterfejsu
{
    void WyswieltWiek();

    double PoliczRachunek();
}
								
						
Notatka

Interfejsy mogą dziedziczyć po innych interfejsach, używając słowa kluczowego ":".

								
class Osoba : Kobieta
{
    public string Imie { get; set; }
}
								
						

Interfejsy mogą zawierać metody, właściwości i zdarzenia, ale nie mogą zawierać pola i implementacji metod. Wszystkie elementy interfejsu są publiczne i nie mogą być oznaczone jako prywatne lub chronione.

								
using System;

class Program
{
    static void Main(string[] args)
    {
        Document document = new Document();
        document.Content = "Treść dokumentu";

        // użycie interfejsu IPrintable
        IPrintable printable = document;
        printable.Print();

        // użycie interfejsu ISaveable
        ISaveable saveable = document;
        saveable.Save();
    }

    interface IPrintable
    {
        void Print();
    }

    interface ISaveable
    {
        void Save();
    }

    class Document : IPrintable, ISaveable
    {
        public string Content { get; set; }

        public void Print()
        {
            Console.WriteLine(Content);
        }

        public void Save()
        {
            // implementacja zapisywania do pliku
        }
    }
}
								
						
Wyjaśnienie

W powyższym przykładzie stworzyliśmy interfejsy IPrintable i ISaveable, które zawierają metody Print() i Save() odpowiednio. Następnie stworzyliśmy klasę Document, która implementuje te interfejsy i zawiera implementację tych metod. W metodzie Main() tworzymy obiekt klasy Document i przypisujemy go do zmiennych typu IPrintable i ISaveable. Dzięki temu możemy używać tych zmiennych do wywoływania metod Print() i Save() na obiekcie klasy Document.

Notatka

interfejsy pozwalają na abstrakcyjne określenie zestawu metod, które muszą być zaimplementowane przez klasy, które chcą implementować dany interfejs. Jest to przydatne w przypadku, gdy chcemy używać różnych klas, które implementują dany interfejs, w sposób niezależny od ich konkretnej implementacji.