Objektově orientované programování (Visual Basic)
Visual Basic poskytuje úplnou podporu pro objektově orientované programování včetně zapouzdření, dědičnosti a polymorfismu.
Zapouzdření znamená, že skupina souvisejících vlastností, metod a dalších členů je považována za jednu jednotku nebo objekt.
Dědičnost popisuje možnost vytvářet nové třídy na základě existující třídy.
Polymorfismus znamená, že můžete mít více tříd, které lze použít zaměnitelné, i když každá třída implementuje stejné vlastnosti nebo metody různými způsoby.
Tato část popisuje následující koncepty:
Třídy a objekty
Třída terms a Object se někdy používají zaměnitelné, ale ve skutečnosti třídy popisují typ objektů, zatímco objekty jsou použitelné instance tříd. To znamená, že vytvoření objektu se nazývá vytváření instancí. Pomocí analogie podrobného plánu je třída plán a objekt je sestaven z tohoto podrobného plánu.
Definování třídy:
Class SampleClass
End Class
Visual Basic také poskytuje světlou verzi tříd nazvaných struktury , které jsou užitečné v případě, že potřebujete vytvořit velké pole objektů a nechcete pro ně spotřebovat příliš mnoho paměti.
Definování struktury:
Structure SampleStructure
End Structure
Další informace naleznete v tématu:
Členové třídy
Každá třída může mít různé členy třídy , které obsahují vlastnosti, které popisují data třídy, metody, které definují chování třídy, a události, které poskytují komunikaci mezi různými třídami a objekty.
Vlastnosti a pole
Pole a vlastnosti reprezentují informace, které objekt obsahuje. Pole jsou jako proměnné, protože je lze číst nebo nastavit přímo.
Definování pole:
Class SampleClass
Public SampleField As String
End Class
Vlastnosti mají procedury Get a set, které poskytují větší kontrolu nad tím, jak jsou hodnoty nastaveny nebo vraceny.
Visual Basic umožňuje vytvořit soukromé pole pro uložení hodnoty vlastnosti, nebo použít automaticky implementované vlastnosti, které automaticky vytvoří toto pole na pozadí a poskytnou základní logiku pro procedury vlastností.
Definování automaticky implementované vlastnosti:
Class SampleClass
Public Property SampleProperty as String
End Class
Pokud potřebujete provést některé další operace pro čtení a zápis hodnoty vlastnosti, definujte pole pro uložení hodnoty vlastnosti a poskytněte základní logiku pro uložení a načtení:
Class SampleClass
Private m_Sample As String
Public Property Sample() As String
Get
' Return the value stored in the field.
Return m_Sample
End Get
Set(ByVal Value As String)
' Store the value in the field.
m_Sample = Value
End Set
End Property
End Class
Většina vlastností má metody nebo postupy pro nastavení a získání hodnoty vlastnosti. Můžete však vytvořit vlastnosti jen pro čtení nebo jen pro zápis a omezit tak jejich úpravu nebo čtení. v Visual Basic můžete použít ReadOnly WriteOnly klíčová slova a. Automaticky implementované vlastnosti ale nemůžou být jen pro čtení nebo jen pro zápis.
Další informace naleznete v tématu:
Metody
Metoda je akce, kterou může objekt provádět.
Poznámka
v Visual Basic existují dva způsoby, jak vytvořit metodu: Sub příkaz se používá, pokud metoda nevrací hodnotu Function . příkaz se používá, pokud metoda vrátí hodnotu.
Chcete-li definovat metodu třídy:
Class SampleClass
Public Function SampleFunc(ByVal SampleParam As String)
' Add code here
End Function
End Class
Třída může mít několik implementací nebo přetížení stejné metody, která se liší v počtu parametrů nebo typů parametrů.
Přetížení metody:
Overloads Sub Display(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Ve většině případů deklarujete metodu v rámci definice třídy. nicméně Visual Basic také podporuje rozšiřující metody , které umožňují přidat metody do existující třídy mimo skutečnou definici třídy.
Další informace naleznete v tématu:
Konstruktory
Konstruktory jsou metody třídy, které jsou spouštěny automaticky, když je vytvořen objekt daného typu. Konstruktory obvykle inicializují datové členy nového objektu. Konstruktor lze spustit pouze jednou při vytvoření třídy. Kromě toho kód v konstruktoru se vždy spouští před jakýmkoli jiným kódem ve třídě. Můžete však vytvořit více přetížení konstruktoru stejným způsobem jako u jakékoli jiné metody.
Chcete-li definovat konstruktor pro třídu:
Class SampleClass
Sub New(ByVal s As String)
// Add code here.
End Sub
End Class
Další informace najdete v tématu: Doba života objektu: vytváření a zničení objektů.
Destruktory
Destruktory se používají k destrukci instancí tříd. v .NET Framework systém uvolňování paměti automaticky spravuje přidělování a uvolňování paměti pro spravované objekty ve vaší aplikaci. Nicméně stále budete potřebovat destruktory k vyčištění všech nespravovaných prostředků, které vaše aplikace vytvoří. Pro třídu může existovat pouze jeden destruktor.
další informace o destruktorech a uvolňování paměti v .NET Framework naleznete v tématu uvolňování paměti.
Události
Události umožňují třídě nebo objektu upozornit jiné třídy nebo objekty, když dojde k nějakému zájmu. Třída, která odesílá (nebo vyvolává) událost, se nazývá Vydavatel a třídy, které přijmou (nebo zpracovávají) událost se nazývají předplatitelé. Další informace o událostech, jak jsou vyvolány a zpracovávány, naleznete v tématu events.
Chcete-li deklarovat události, použijte příkaz Event.
Chcete-li vyvolat události, použijte příkaz RaiseEvent.
Chcete-li určit obslužné rutiny událostí pomocí deklarativního způsobu, použijte příkaz WithEvents a klauzuli Handles .
Aby bylo možné dynamicky přidávat, odebírat a měnit obslužné rutiny události přidružené k události, použijte příkaz addHandler a příkaz removeHandler spolu s operátorem AddressOf.
Vnořené třídy
Třída definovaná v rámci jiné třídy se nazývá vnořená. Ve výchozím nastavení je vnořená třída soukromá.
Class Container
Class Nested
' Add code here.
End Class
End Class
Chcete-li vytvořit instanci vnořené třídy, použijte název třídy kontejneru následovaný tečkou a následně následovaný názvem vnořené třídy:
Dim nestedInstance As Container.Nested = New Container.Nested()
Modifikátory přístupu a úrovně přístupu
Všechny třídy a členy třídy mohou určit, jakou úroveň přístupu poskytují jiné třídě, pomocí modifikátorů přístupu.
K dispozici jsou následující modifikátory přístupu:
| Visual Basic Upravující | Definice |
|---|---|
| Veřejná | K typu nebo členu může přistupovat jakýkoli jiný kód ve stejném sestavení nebo jiném sestavení, které na něj odkazuje. |
| Privátní | K typu nebo členu je možné přistupovat pouze pomocí kódu ve stejné třídě. |
| Chráněné | K typu nebo členu lze přistupovat pouze pomocí kódu ve stejné třídě nebo v odvozené třídě. |
| Friend | K typu nebo členu lze přistupovat libovolným kódem ve stejném sestavení, ale nikoli z jiného sestavení. |
Protected Friend |
K typu nebo členu lze přistupovat libovolným kódem ve stejném sestavení nebo jakoukoli odvozenou třídou v jiném sestavení. |
Další informace najdete v tématu Úrovně přístupu v Visual Basic.
Vytváření instancí tříd
Pokud chcete vytvořit objekt , musíte vytvořit instanci třídy nebo vytvořit instanci třídy.
Dim sampleObject as New SampleClass()
Po vytvoření instance třídy můžete přiřadit hodnoty vlastnostem a polím instance a vyvolat metody třídy.
' Set a property value.
sampleObject.SampleProperty = "Sample String"
' Call a method.
sampleObject.SampleMethod()
Pokud chcete přiřadit hodnoty vlastnostem během procesu vytváření instancí třídy, použijte inicializátory objektů:
Dim sampleObject = New SampleClass With
{.FirstProperty = "A", .SecondProperty = "B"}
Další informace naleznete v tématu:
Sdílené třídy a členy
Sdílený člen třídy je vlastnost, procedura nebo pole sdílené všemi instancemi třídy.
Definování sdíleného členu:
Class SampleClass
Public Shared SampleString As String = "Sample String"
End Class
Pro přístup ke sdílenému členu použijte název třídy bez vytvoření objektu této třídy:
MsgBox(SampleClass.SampleString)
Sdílené moduly v Visual Basic mají pouze sdílené členy a nelze vytvořit instanci. Sdílené členy také nemohou přistupovat k nes sdíleným vlastnostem, polím nebo metodám.
Další informace naleznete v tématu:
Anonymní typy
Anonymní typy umožňují vytvářet objekty bez zápisu definice třídy pro datový typ. Místo toho kompilátor vygeneruje třídu za vás. Třída nemá žádný použitelný název a obsahuje vlastnosti, které zadáte při deklaraci objektu.
Vytvoření instance anonymního typu:
' sampleObject is an instance of a simple anonymous type.
Dim sampleObject =
New With {Key .FirstProperty = "A", .SecondProperty = "B"}
Další informace najdete v tématu Anonymní typy.
Dědičnost
Dědičnost umožňuje vytvořit novou třídu, která znovu používá, rozšiřuje a upravuje chování definované v jiné třídě. Třída, jejíž členy jsou zděděny, se nazývá základní třída a třída, která dědí tyto členy, se nazývá odvozená třída. Všechny třídy v Visual Basic implicitně dědí z třídy , která podporuje hierarchii tříd .NET a poskytuje služby Object nízké úrovně pro všechny třídy.
Poznámka
Visual Basic nepodporuje vícenásobnou dědičnost. To znamená, že můžete zadat pouze jednu základní třídu pro odvozenou třídu.
Dědění ze základní třídy:
Class DerivedClass
Inherits BaseClass
End Class
Ve výchozím nastavení lze dědit všechny třídy. Můžete však určit, zda se třída nesmí používat jako základní třída, nebo můžete vytvořit třídu, která se může použít pouze jako základní třída.
Chcete-li určit, že třídu nelze použít jako základní třídu:
NotInheritable Class SampleClass
End Class
Chcete-li určit, že třídu lze použít pouze jako základní třídu a nelze vytvořit instanci:
MustInherit Class BaseClass
End Class
Další informace naleznete v tématu:
Přepsání členů
Ve výchozím nastavení odvozená třída dědí všechny členy ze své základní třídy. Pokud chcete změnit chování zděděného členu, musíte ho přepsat. To znamená, že v odvozené třídě můžete definovat novou implementaci metody, vlastnosti nebo události.
Následující modifikátory slouží k řízení přepisování vlastností a metod:
| Visual Basic Modifikátor | Definice |
|---|---|
| Overridable | Umožňuje přepsání členu třídy v odvozené třídě. |
| Přepsání | Přepíše virtuální (přepisovatelný) člen definovaný v základní třídě. |
| NotOverridable | Zabraňuje přepsání členu ve zděděné třídě. |
| MustOverride | Vyžaduje přepsání členu třídy v odvozené třídě. |
| Shadows | Skryje člen zděděný ze základní třídy. |
Rozhraní
Rozhraní, jako jsou třídy, definují sadu vlastností, metod a událostí. Na rozdíl od tříd ale rozhraní implementaci neposkytují. Jsou implementovány třídami a definovány jako samostatné entity od tříd. Rozhraní představuje kontrakt v tom smyslu, že třída, která implementuje rozhraní, musí implementovat všechny aspekty tohoto rozhraní přesně tak, jak je definováno.
Definování rozhraní:
Public Interface ISampleInterface
Sub DoSomething()
End Interface
Implementace rozhraní ve třídě:
Class SampleClass
Implements ISampleInterface
Sub DoSomething
' Method implementation.
End Sub
End Class
Další informace naleznete v tématu:
Obecné typy
Třídy, struktury, rozhraní a metody v rozhraní .NET mohou zahrnovat parametry typu definující typy objektů, které mohou ukládat nebo používat. Nejběžnějším příkladem obecných typů je kolekce, ve které můžete určit typ objektů, které se mají v kolekci uložit.
Definování obecné třídy:
Class SampleGeneric(Of T)
Public Field As T
End Class
Vytvoření instance obecné třídy:
Dim sampleObject As New SampleGeneric(Of String)
sampleObject.Field = "Sample string"
Další informace naleznete v tématu:
Delegáti
Delegát je typ, který definuje podpis metody a může poskytnout odkaz na libovolnou metodu s kompatibilním podpisem. Metodu můžete vyvolat (nebo volat) prostřednictvím delegáta. Delegáty se používají pro předávání metod jako argumentů jiným metodám.
Poznámka
Ovladače událostí nejsou nic jiného než metody, které jsou vyvolány prostřednictvím delegátů. Další informace o používání delegátů při zpracování událostí najdete v tématu Události.
Vytvoření delegáta:
Delegate Sub SampleDelegate(ByVal str As String)
Vytvoření odkazu na metodu, která odpovídá podpisu určenému delegátem:
Class SampleClass
' Method that matches the SampleDelegate signature.
Sub SampleSub(ByVal str As String)
' Add code here.
End Sub
' Method that instantiates the delegate.
Sub SampleDelegateSub()
Dim sd As SampleDelegate = AddressOf SampleSub
sd("Sample string")
End Sub
End Class
Další informace naleznete v tématu: