Rozhraní (Visual Basic)
Rozhraní definují vlastnosti, metody a události, které mohou třídy 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í stávají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č byste místo dědičnosti tříd mohli chtít používat rozhraní:
Rozhraní jsou vhodnější pro situace, kdy vaše aplikace vyžadují k poskytování určitých funkcí řadu případně 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ů. Za příkazem Interface
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
, Interface
Property
, , Class
, , Structure
a 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
.
V oboru názvů jsou Friend
příkazy rozhraní ve výchozím nastavení, ale mohou být také explicitně deklarovány 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
, , Friend
Protected
nebo Private
.
Poznámka
Klíčové Shadows
slovo lze použít pro všechny členy rozhraní. Klíčové Overloads
slovo lze použít pro Sub
, Function
a Property
příkazy deklarované v definici rozhraní. Příkazy Property
navíc mohou mít Default
modifikátory , ReadOnly
nebo WriteOnly
modifikátory. Žádný z ostatních modifikátorů –Public
, Private
, Friend
, Protected
Shared
, Overrides
, MustOverride
, nebo Overridable
– nejsou povoleny. Další informace najdete 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
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 příkaz Class
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žívat jakýkoli právní identifikátor a není omezen na InterfaceName_MethodName
konvenci používanou 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 implementovaného členu musí odpovídat vlastnosti rozhraní nebo deklaraci člena v rozhraní. Nejběžnější způsob implementace elementu 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 právní na deklarace metody instance, včetně Overloads
, , Overrides
, Overridable
Public
, Protected
Friend
Private
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 člen rozhraní, tento člen bude k dispozici prostřednictvím rozhraní, i když není k dispozici přímo na proměnných objektů 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
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
Můžete implementovat vlastnost readonly s readwrite vlastnost (to znamená, že nemusíte deklarovat ji jen pro čtení v implementační třídě). Implementace rozhraní slíbí implementovat alespoň členy, které rozhraní deklaruje, ale můžete nabídnout další funkce, například povolit zápis vlastnosti.
Související témata
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 kontravarianci v obecných rozhraních a poskytuje seznam variant obecných rozhraní v .NET Framework. |