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.

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:

Viz také