Rozhraní (Visual Basic)

Rozhraní definují vlastnosti, metody a události, které třídy mohou implementovat. Rozhraní umožňují definovat funkce jako malé skupiny úzce souvisejících vlastností, metod a událostí. Tím se sníží problémy s kompatibilitou, protože můžete vyvíjet rozšířená implementace pro vaše rozhraní bez nutnosti přecházet z existujícího kódu. Nové funkce můžete kdykoli přidat pomocí vývoje dalších rozhraní a implementací.

Existuje několik dalších důvodů, proč možná budete chtít použít rozhraní namísto dědičnosti tříd:

  • Rozhraní jsou lépe vhodná pro situace, kdy vaše aplikace vyžadují mnoho možných nesouvisejících typů objektů, které poskytují určité funkce.

  • Rozhraní jsou pružnější než základní třídy, protože lze definovat jednu implementaci, která může implementovat více rozhraní.

  • Rozhraní jsou lépe v situacích, kdy není nutné dědit implementaci ze základní třídy.

  • Rozhraní jsou užitečná, když nemůžete použít dědičnost tříd. Struktury například nemohou dědit z tříd, ale mohou implementovat rozhraní.

Deklarace rozhraní

Definice rozhraní jsou uzavřeny v Interface End Interface příkazech a. Po Interface příkazu můžete přidat volitelný Inherits příkaz, který zobrazí seznam jednoho nebo více zděděných rozhraní. InheritsPříkazy musí předcházet před všemi ostatními příkazy v deklaraci s výjimkou komentářů. Zbývající příkazy v definici rozhraní by měly být Event příkazy,,,,, Sub Function Property Interface Class , Structure a Enum . Rozhraní nemůžou obsahovat žádný implementační kód ani příkazy spojené s implementačním kódem, jako je například End Sub nebo End Property .

V oboru názvů jsou příkazy rozhraní Friend ve výchozím nastavení, ale lze je také explicitně deklarovat jako Public nebo Friend . Rozhraní definovaná v rámci tříd, modulů, rozhraní a struktur jsou Public ve výchozím nastavení, ale mohou být také explicitně deklarována Public jako Friend , Protected , nebo Private .

Poznámka

ShadowsKlíčové slovo lze použít pro všechny členy rozhraní. OverloadsKlíčové slovo lze použít pro Sub příkazy, Function a Property deklarované v definici rozhraní. Kromě toho Property příkazy mohou mít Default ReadOnly WriteOnly modifikátory, nebo. Žádný z ostatních modifikátorů – Public , Private , Friend , Protected , Shared , Overrides , MustOverride nebo Overridable – jsou povoleny. Další informace najdete v tématu deklarace kontextů a výchozích úrovní přístupu.

Například následující kód definuje rozhraní s jednou funkcí, jednu vlastnost a jednu událost.

Interface IAsset
    Event ComittedChange(ByVal Success As Boolean)
    Property Division() As String
    Function GetID() As Integer
End Interface

Implementace rozhraní

vyhrazené slovo Visual Basic Implements se používá dvěma způsoby. ImplementsPříkaz znamená, že třída nebo struktura implementuje rozhraní. ImplementsKlíčové slovo označuje, že člen třídy nebo člen struktury implementuje konkrétního člena rozhraní.

Implements – Příkaz

Pokud třída nebo struktura implementuje jedno nebo více rozhraní, musí obsahovat Implements příkaz hned za Class Structure příkazem or. ImplementsPříkaz vyžaduje čárkami oddělený seznam rozhraní, která má být implementována třídou. Třída nebo struktura musí implementovat všechny členy rozhraní pomocí Implements klíčového slova.

Klíčové slovo Implements

ImplementsKlíčové slovo vyžaduje, aby byly implementovány čárkami oddělený seznam členů rozhraní. Obecně je určen pouze jeden člen rozhraní, ale lze zadat více členů. Specifikace člena rozhraní se skládá z názvu rozhraní, který musí být zadán v příkazu Implements v rámci třídy; období; a název členské funkce, vlastnost nebo událost, která má být implementována. Název členu, který implementuje člena rozhraní, může použít jakýkoliv platný identifikátor a není omezen na InterfaceName_MethodName konvenci použitou v dřívějších verzích Visual Basic.

Například následující kód ukazuje, jak deklarovat podprogram s názvem Sub1 , který implementuje metodu rozhraní:

Class Class1
    Implements interfaceclass.interface2

    Sub Sub1(ByVal i As Integer) Implements interfaceclass.interface2.Sub1
    End Sub
End Class

Typy parametrů a návratové typy implementující člena se musí shodovat s vlastností rozhraní nebo deklarací členů v rozhraní. Nejběžnější způsob, jak implementovat element rozhraní, je člen, který má stejný název jako rozhraní, jak je znázorněno v předchozím příkladu.

Chcete-li deklarovat implementaci metody rozhraní, můžete použít všechny atributy, které jsou platné pro deklarace metod instance, včetně Overloads , Overrides , Overridable , Public , Private , Protected , Friend , Protected Friend ,, a MustOverride Default Static . SharedAtribut není platný, protože definuje třídu namísto metody instance.

Pomocí Implements , můžete také napsat jedinou metodu, která implementuje více metod definovaných v rozhraní, jako v následujícím příkladu:

Class Class2
    Implements I1, I2

    Protected Sub M1() Implements I1.M1, I1.M2, I2.M3, I2.M4
    End Sub
End Class

Můžete použít privátního člena k implementaci člena rozhraní. Když soukromý člen implementuje člen rozhraní, bude tento člen dostupný prostřednictvím rozhraní, i když není k dispozici přímo na objektových proměnných pro třídu.

Příklady implementace rozhraní

Třídy, které implementují rozhraní, musí implementovat všechny jeho vlastnosti, metody a události.

Následující příklad definuje dvě rozhraní. Druhé rozhraní Interface2 dědí Interface1 a definuje další vlastnost a metodu.

Interface Interface1
    Sub sub1(ByVal i As Integer)
End Interface

' Demonstrates interface inheritance.
Interface Interface2
    Inherits Interface1
    Sub M1(ByVal y As Integer)
    ReadOnly Property Num() As Integer
End Interface

Následující příklad implementuje Interface1 rozhraní definované v předchozím příkladu:

Public Class ImplementationClass1
    Implements Interface1
    Sub Sub1(ByVal i As Integer) Implements Interface1.sub1
        ' Insert code here to implement this method.
    End Sub
End Class

Konečný příklad implementuje Interface2 , včetně metody zděděné z Interface1 :

Public Class ImplementationClass2
    Implements Interface2
    Dim INum As Integer = 0
    Sub sub1(ByVal i As Integer) Implements Interface2.sub1
        ' Insert code here that implements this method.
    End Sub
    Sub M1(ByVal x As Integer) Implements Interface2.M1
        ' Insert code here to implement this method.
    End Sub

    ReadOnly Property Num() As Integer Implements Interface2.Num
        Get
            Num = INum
        End Get
    End Property
End Class

Můžete implementovat vlastnost jen pro čtení s vlastností ReadOnly (to znamená, že ji nemusíte deklarovat jen pro čtení v implementaci třídy). Implementace rozhraní příslibů k implementaci alespoň členů, které rozhraní deklaruje, ale můžete nabízet více funkcí, jako je například umožnění zapisovatelné vlastnosti.

Nadpis Popis
Návod: Vytvoření a implementace rozhraní Poskytuje podrobný postup, který vás provede procesem definování a implementace vlastního rozhraní.
Odchylky obecných rozhraní Popisuje kovarianci a kontravariance v obecných rozhraních a poskytuje seznam variantních obecných rozhraní v .NET Framework.