Sdílet prostřednictvím


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í; to snižuje problémy s kompatibilitou, protože můžete vyvíjet vylepšené implementace pro vaše rozhraní bez ohrožení existujícího kódu. Nové funkce můžete kdykoli přidat vývojem dalších rozhraní a implementací.

Existuje několik dalších důvodů, proč místo dědičnosti tříd můžete chtít používat rozhraní:

  • Rozhraní jsou vhodnější pro situace, kdy vaše aplikace k poskytování určitých funkcí vyžadují mnoho nesouvisejících typů objektů.

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

  • Rozhraní jsou lepší v situacích, kdy nemusíte dědit implementaci ze základní třídy.

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

Deklarace rozhraní

Definice rozhraní jsou uzavřeny v rámci Interface příkazů a End Interface příkazů. Interface Za příkazem můžete přidat volitelný Inherits příkaz, který obsahuje jedno nebo více zděděných rozhraní. Příkazy Inherits musí předcházet všem ostatním příkazům v deklaraci s výjimkou komentářů. Zbývající příkazy v definici rozhraní by měly být Event, Sub, Function, Property, Interface, , ClassStructurea Enum příkazy. Rozhraní nemohou obsahovat žádný implementační kód nebo příkazy přidružené k implementačnímu kódu, například End Sub nebo End Property.

Ve jmenném prostoru jsou Friend prohlášení rozhraní ve výchozím nastavení, ale mohou být také explicitně definované 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 jako Public, , FriendProtectednebo Private.

Poznámka:

Klíčové Shadows slovo lze použít pro všechny členy rozhraní. Klíčové Overloads slovo lze použít na Sub, Functiona Property příkazy deklarované v definici rozhraní. Kromě toho Property příkazy mohou mít Default modifikátory, ReadOnly nebo WriteOnly modifikátory. Žádný z ostatních modifikátorů –Public , Private, FriendProtectedSharedOverrides, , MustOverridenebo Overridable— nejsou povoleny. Další informace naleznete v tématu Kontexty deklarace a výchozí úrovně přístupu.

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

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

Implementace rozhraní

Rezervované slovo Implements jazyka Visual Basic se používá dvěma způsoby. Příkaz Implements označuje, že třída nebo struktura implementuje rozhraní. Klíčové Implements slovo označuje, že člen třídy nebo člen struktury implementuje konkrétní člen rozhraní.

Implements – příkaz

Pokud třída nebo struktura implementuje jedno nebo více rozhraní, musí obsahovat Implements příkaz bezprostředně za Class příkaz nebo Structure příkaz. Příkaz Implements vyžaduje, aby třída implementovala čárkami oddělený seznam rozhraní. Třída nebo struktura musí implementovat všechny členy rozhraní pomocí klíčového Implements slova.

Implementuje klíčové slovo.

Klíčové Implements slovo vyžaduje, aby byl implementován čárkami oddělený seznam členů rozhraní. Obecně platí, že je zadán pouze jeden člen rozhraní, ale můžete zadat více členů. Specifikace člena rozhraní se skládá z názvu rozhraní, který musí být zadán v implements příkaz v rámci třídy; období; a název členské funkce, vlastnosti nebo události, která se má implementovat. Název člena, který implementuje člen rozhraní, může použít libovolný platný identifikátor a není omezen pouze na InterfaceName_MethodName konvenci použitou v dřívějších verzích jazyka Visual Basic.

Například následující kód ukazuje, jak deklarovat podprogram pojmenovaný 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 implementovaného členu musí odpovídat vlastnosti rozhraní nebo deklaraci členu v rozhraní. Nejběžnější způsob implementace prvku rozhraní je s členem, 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 jakékoli atributy, které jsou platné u deklarací metod instance, včetně Overloads, Overrides, Overridable, Public, Private, Protected, Friend, Protected Friend, MustOverride, Default a Static. Atribut Shared není legální, protože definuje třídu místo metody instance.

Pomocí Implements, můžete také napsat jednu 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

K implementaci člena rozhraní můžete použít soukromý člen. Když soukromý člen implementuje člena rozhraní, stane se tím člen dostupný prostřednictvím rozhraní, i když není přímo dostupný přes objektové proměnné této třídy.

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 Interface1rozhraní 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

Poslední 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

Vlastnost jen pro čtení můžete implementovat pomocí vlastnosti pro čtení a zápis (to znamená, že ji nemusíte deklarovat jako jen pro čtení v implementační třídě). Zavedení rozhraní znamená, že budou implementováni alespoň členové, které rozhraní definuje, ale můžete nabídnout další funkce, jako například umožnění, aby vlastnost byla zapisovatelná.

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