Udostępnij za pośrednictwem


Interfejsy (Przewodnik programowania w języku C#)

Interfejs zawiera definicje dla grupy pokrewne funkcje które klasy lub struct można zaimplementować.

Za pomocą interfejsów, można na przykład dołączyć zachowanie z wielu źródeł w klasie.Że możliwości jest ważne w języku C#, ponieważ język nie obsługuje wielokrotne dziedziczenie klas.Ponadto należy użyć interfejsu, jeśli chcesz przeprowadzić symulację dziedziczenia dla strukturach, ponieważ one faktycznie nie może dziedziczyć z innym elementem struct lub klasy.

Definiowanie interfejsu za pomocą interfejsu słowa kluczowego, jak pokazano w następującym przykładzie.

interface IEquatable<T>
{
    bool Equals(T obj);
}

Wszystkie klasy lub struktury, który implementuje IEquatable interfejs musi zawierać definicję dla Equals metodę, która odpowiada podpis, który określa interfejs.W rezultacie można liczyć na klasy, który implementuje IEquatable<T> zawiera Equals metodę, za pomocą którego wystąpienie klasy może ustalić, czy jest równa inne wystąpienie tej samej klasy.

Definicja IEquatable<T> nie zapewniać implementację dla Equals.Interfejs definiuje tylko podpis.W ten sposób interfejs w języku C# jest podobna do klasy abstrakcyjnej, w którym abstrakcyjne są wszystkie metody.Jednakże klasie lub strukturze można zaimplementować wiele interfejsów, ale klasa może odziedziczyć tylko jedną klasę streszczenie, czy nie.W związku z tym za pomocą interfejsów, może zawierać zachowanie z wielu źródeł, w klasie.

Aby uzyskać więcej informacji na temat klasy abstrakcyjne, zobacz streszczenie i klas w plombowane i składowe klas.

Może zawierać interfejsy, metody, właściwości, zdarzenia, indeksatory lub dowolnej kombinacji tych typów czterech elementów członkowskich.Aby uzyskać łącza do przykładów, zobacz Sekcje pokrewne.Interfejs nie może zawierać stałe, pól, podmioty gospodarcze, konstruktorów wystąpienia, destruktory lub typów.Członków interfejsu są publikowane automatycznie i nie mogą zawierać żadnych modyfikatorów dostępu.Członkowie nie mogą być również statycznej.

Aby zaimplementować elementem interfejsu, odpowiedni element członkowski wykonawczych klasy musi być publiczne, niestatyczny, a o tej samej nazwie i podpisu jako członka interfejsu.

Po klasie lub strukturze implementuje interfejs, klasie lub strukturze musi zapewniać implementację dla wszystkich członków, które definiuje interfejs.Interfejs sama w sobie zapewnia nie funkcji, która ułożona klasa może odziedziczyć w taki sposób, w że może dziedziczyć funkcjonalność klasy podstawowej.Jednak jeśli klasą implementuje interfejs, dowolnej klasy, która wywodzi się z klasy bazowej dziedziczy że wprowadzenie w życie.

Poniższy przykład pokazuje implementację IEquatable <T> interfejs.Klasa wykonawczych, Car, musi zapewniać implementację Equals metoda.

public class Car : IEquatable<Car>
{
    public string Make {get; set;}
    public string Model { get; set; }
    public string Year { get; set; }

    // Implementation of IEquatable<T> interface 
    public bool Equals(Car car)
    {
        if (this.Make == car.Make &&
            this.Model == car.Model &&
            this.Year == car.Year)
        {
            return true;
        }
        else 
            return false;
    }
}

Właściwości i indeksatory klasy można zdefiniować dodatkowe metod dostępu do właściwości lub indeksowania, która jest zdefiniowana w interfejsie.Na przykład interfejs może zadeklarować właściwość, która ma się metoda dostępu.Klasa, która implementuje interfejs można zadeklarować tej samej właściwości z obu get i zestaw metoda dostępu.Jednakże jeśli właściwość lub indeksator używa jawnych implementacji, muszą odpowiadać akcesorów.Aby uzyskać więcej informacji o jawnych implementacji, zobacz Implementacja interfejsu jawnego (Przewodnik programowania w języku C#) i Właściwości interfejsu (Przewodnik programowania w języku C#).

Interfejsy mogą zawierać inne interfejsy.Klasa może zawierać interfejs wiele razy za pośrednictwem klasy bazowej, która dziedziczy lub za pośrednictwem interfejsów, które implementują innych interfejsów.Jednak klasa może zapewnić implementację interfejsu tylko jeden raz i tylko jeśli klasy deklaruje interfejsu, w ramach definicji klasy (class ClassName : InterfaceName).Jeśli interfejs jest dziedziczona, ponieważ dziedziczone klasy podstawowej, która implementuje interfejs, klasa podstawowa zawiera implementacji składniki interfejsu.Jednakże w klasie pochodnej można przeprojektowywać członków interfejsu, zamiast korzystać z dziedziczonych wprowadzenia w życie.

Klasa podstawowa mogą także implementować członków interfejsu za pomocą wirtualnych członków.W takim przypadku klasie pochodnej można zmienić zachowanie interfejsu przez zastąpienie wirtualnego członków.Aby dowiedzieć się więcej na temat Członkowie wirtualnego, zobacz polimorfizmu.

Krótki opis interfejsów

Interfejs ma następujące właściwości:

  • Interfejs jest jak abstrakcyjna klasa podstawowa.Wszystkie klasy lub struktury, która implementuje interfejs musi implementować wszystkich jej członków.

  • Nie można bezpośrednio utworzyć wystąpienia interfejsu.Jego członkowie są implementowane przez wszystkie klasy lub struktury, która implementuje interfejs.

  • Interfejsy mogą zawierać zdarzeń, indeksowania, metod i właściwości.

  • Interfejsy zawierają nie wprowadzania w życie metod.

  • Klasie lub strukturze można zaimplementować wiele interfejsów.Klasę można dziedziczyć klasą a także zaimplementować jeden lub więcej interfejsów.

W tej sekcji

Sekcje pokrewne

Rekomendowane rozdziału książki

Interfejsy w uczenia się języka C# 3.0: opanować podstawy języka C# 3.0

Zobacz też

Informacje

Dziedziczenie (Przewodnik programowania w języku C#)

Koncepcje

Przewodnik programowania w języku C#