Sdílet prostřednictvím


Rozhraní (Průvodce programováním v C#)

Rozhraní obsahuje definice pro skupinu souvisejících funkcí, třídy nebo struktury lze implementovat.

Pomocí rozhraní může například zahrnovat chování z více zdrojů ve třídě.Tuto možnost je důležité v jazyce C#, protože jazyk nepodporuje vícenásobnou dědičnost tříd.Kromě toho je nutné použít rozhraní, pokud chcete simulovat dědičnost struktur, protože nelze skutečně dědí z jiné třídy nebo struktury.

Definice rozhraní pomocí rozhraní klíčové slovo, jak ukazuje následující příklad.

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

Každá třída nebo struktura, která implementuje IEquatable rozhraní musí obsahovat definici Equals metodu, která odpovídá podpisu, který specifikuje rozhraní.V důsledku toho se můžete spolehnout na třídu, která implementuje IEquatable<T> tak, aby obsahovaly Equals metody, kterými lze instanci třídy zjistit, zda je rovna další instance stejného druhu.

Definice IEquatable<T> neposkytuje implementaci pro Equals.Rozhraní definuje pouze podpis.Tento způsob se podobá abstraktní třída, ve kterém jsou všechny metody abstraktní rozhraní v jazyce C#.Třída nebo struktura může implementovat více rozhraní však třídy mohou dědit pouze jednu třídu abstraktní, či nikoli.Proto pomocí rozhraní může obsahovat chování z více zdrojů ve třídě.

Další informace o abstraktní třídy naleznete v tématu abstraktní a uzavřených tříd a členů tříd.

Rozhraní může obsahovat, metody, vlastnosti, události, indexování nebo libovolnou kombinaci typů těchto čtyř členů.Odkazy na příklady naleznete v tématu Související oddíly.Rozhraní nemůže obsahovat konstanty, pole, operátory, instance konstruktory, destruktory nebo typy.Jsou automaticky veřejné členy rozhraní a neobsahují žádné modifikátory přístupu.Členové také nemůže být statické.

Provádět člen rozhraní musí odpovídající člen implementované třídy být veřejnou nestatickou a mít stejné jméno a podpis jako člen rozhraní.

Je-li třída nebo struktura implementuje rozhraní, třídy nebo struktury musí poskytnout implementaci pro všechny členy, které definuje rozhraní.Rozhraní, sám poskytuje žádné funkce, které může dědit třídu nebo strukturu způsobem, že přebírají funkce základní třídy.Je-li základní třída implementuje rozhraní, třídy, která je odvozena ze základní třídy dědí plnění.

Následující příklad ukazuje implementace IEquatable <T> rozhraní.Implementované třídy Car, musí poskytnout implementaci 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;
    }
}

Vlastnosti a indexování třídy můžete definovat další přístupové objekty vlastnosti nebo indexeru, která je definována v rozhraní.Rozhraní může být například deklarovat vlastnost, která má získat přistupujícího objektu.Třídu, která implementuje rozhraní můžete deklarovat vlastnost stejné s oběma get a set přistupujícího objektu.Však pokud vlastnost nebo indexovací člen používá explicitní implementaci, musí odpovídat přístupové objekty.Další informace o explicitní implementaci naleznete v tématu Implementace explicitního rozhraní (Průvodce programováním v C#) a Vlastnosti rozhraní (Průvodce programováním v C#).

Rozhraní můžete implementovat rozhraní.Třída může obsahovat rozhraní několikrát prostřednictvím základních tříd, které dědí nebo prostřednictvím rozhraní, které implementují rozhraní.Však třídy může poskytnout implementaci rozhraní pouze jeden čas a pouze je-li třída deklaruje rozhraní jako součást definice třídy (class ClassName : InterfaceName).Je-li rozhraní pochází, protože se dědí základní třídy, která implementuje rozhraní, základní třída poskytuje implementaci členů rozhraní.Odvozené třídy lze však přeimplementovat členy rozhraní namísto použití zděděných implementace.

Základní třídy implementovat členy rozhraní pomocí virtuálních členů.Odvozená třída v takovém případě můžete změnit chování rozhraní přepsání virtuální členy.Další informace o virtuálních členů, viz polymorfismus.

Souhrn rozhraní

Rozhraní má následující vlastnosti:

  • Je-li rozhraní jako abstraktní základní třídy.Každá třída nebo struktura, která implementuje rozhraní musí implementovat všechny její členy.

  • Rozhraní nemohou být vytvářena přímo.Jejími členy jsou implementovány tak, že každá třída nebo struktura, která implementuje rozhraní.

  • Rozhraní může obsahovat události, indexování, metody a vlastnosti.

  • Rozhraní obsahovat žádná implementace metody.

  • Třída nebo struktura může implementovat více rozhraní.Třídy mohou dědit základní třídy a také implementovat jedno nebo více rozhraní.

V tomto oddíle

Související oddíly

Hlavní kapitoly knihy

Rozhraní v učení jazyka C# 3.0: Master the Fundamentals of C# 3.0

Viz také

Referenční dokumentace

Dědičnost (Průvodce programováním v C#)

Koncepty

Průvodce programováním v C#