Sdílet prostřednictvím


Objektově orientované programování (Visual Basic)

Visual Basic poskytuje plnou podporu objektově orientovaného 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ů se považuje za jednu jednotku nebo objekt.

Dědičnost popisuje schopnost vytvářet nové třídy založené na existující třídě.

Polymorfismus znamená, že můžete mít více tříd, které lze 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

Termíny třídy a objekt jsou někdy zaměnitelně, ale ve skutečnosti třídy popisují typ objektů, zatímco objekty jsou použitelné instance tříd. Proto se akce vytvoření objektu nazývá vytvoření instance. Pomocí analogie podrobného plánu je třída podrobný plán a objekt je budova z daného podrobného plánu.

Definování třídy:

Class SampleClass
End Class

Visual Basic také poskytuje light verzi tříd označovaných jako struktury , které jsou užitečné, když potřebujete vytvořit velké pole objektů a nechcete pro to spotřebovávat 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 definující chování třídy a události, které poskytují komunikaci mezi různými třídami a objekty.

Vlastnosti a pole

Pole a vlastnosti představují 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 nastavením nebo vrácením hodnot.

Jazyk Visual Basic umožňuje buď vytvořit soukromé pole pro ukládání hodnoty vlastnosti, nebo použít automaticky implementované vlastnosti, které toto pole automaticky vytvoří na pozadí a poskytují základní logiku pro procedury vlastnosti.

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 zadejte základní logiku pro ukládání a načítání:

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 ale vytvořit vlastnosti jen pro čtení nebo jen pro zápis, abyste jim zabránili v úpravě nebo čtení. V jazyce Visual Basic můžete používat ReadOnly klíčová slova a WriteOnly používat je. Automaticky implementované vlastnosti však nemohou 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ést.

Poznámka:

V jazyce Visual Basic existují dva způsoby vytvoření metody: příkaz Sub se používá, pokud metoda nevrací hodnotu; příkaz Function se použije, pokud metoda vrátí hodnotu.

Definování metody 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. Visual Basic však 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é se spouští automaticky při vytvoření objektu 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 vždy běží 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 pro jakoukoli jinou metodu.

Definování konstruktoru pro třídu:

Class SampleClass
    Sub New(ByVal s As String)
        // Add code here.
    End Sub
End Class

Další informace najdete v tématu: Životnost objektu: Způsob vytváření a zničení objektů.

Destruktory

Destruktory se používají k destrukci instancí tříd. V rozhraní .NET Framework systém uvolňování paměti automaticky spravuje přidělení a uvolnění paměti pro spravované objekty ve vaší aplikaci. K vyčištění nespravovaných prostředků, které vaše aplikace vytvoří, ale možná budete potřebovat destruktory. Pro třídu může existovat pouze jeden destruktor.

Další informace o destruktory a uvolňování paměti v rozhraní .NET Framework naleznete v tématu Uvolňování paměti.

Události

Události umožňují třídě nebo objektu upozorňovat 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řijímají (nebo zpracovávají) událost jsou volány odběrateli. Další informace o událostech, způsob jejich vyvolání a zpracování najdete v tématu Události.

  • K deklaraci událostí použijte příkaz události.

  • K vyvolání událostí použijte příkaz RaiseEvent.

  • Pokud chcete určit obslužné rutiny událostí pomocí deklarativního způsobu, použijte příkaz WithEvents a klauzuli Handles .

  • Chcete-li být schopni dynamicky přidávat, odebírat a měnit obslužnou rutinu události přidruženou k události, použijte Příkaz AddHandler a RemoveHandler Příkaz spolu s AddressOf Operator.

Vnořené třídy

Třída definovaná v jiné třídě 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

Pokud chcete vytvořit instanci vnořené třídy, použijte název třídy kontejneru následovanou tečkou a potom název 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 členové třídy mohou určit, jakou úroveň přístupu poskytují jiným třídám pomocí modifikátorů přístupu.

K dispozici jsou následující modifikátory přístupu:

Modifikátor jazyka Visual Basic Definice
Public 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.
Private K typu nebo členu má přístup pouze kód ve stejné třídě.
Protected K typu nebo členu lze přistupovat pouze kódem ve stejné třídě nebo v odvozené třídě.
Friend K typu nebo členu může přistupovat jakýkoli kód ve stejném sestavení, ale ne 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 naleznete v tématu Úrovně přístupu v jazyce 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 k vlastnostem instance a polím a vyvolat metody třídy.

' Set a property value.
sampleObject.SampleProperty = "Sample String"
' Call a method.
sampleObject.SampleMethod()

K přiřazení hodnot k 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 člena:

Class SampleClass
    Public Shared SampleString As String = "Sample String"
End Class

Pokud chcete získat 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 jazyce Visual Basic mají pouze sdílené členy a nelze je vytvořit. Sdílené členy také nemají přístup k nesdílených 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á použitelný název a obsahuje vlastnosti, které zadáte při deklarování 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 naleznete 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 jazyce Visual Basic však implicitně dědí z Object třídy, která podporuje hierarchii tříd .NET a poskytuje služby nízké úrovně pro všechny třídy.

Poznámka:

Visual Basic nepodporuje více dědičnosti. To znamená, že pro odvozenou třídu můžete zadat pouze jednu základní 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 třída nesmí být použita jako základní třída, nebo vytvořit třídu, která se dá použít pouze jako základní třída.

Určení, ž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 člena, musíte ho přepsat. To znamená, že můžete definovat novou implementaci metody, vlastnosti nebo události v odvozené třídě.

K řízení způsobu přepsání vlastností a metod se používají následující modifikátory:

Modifikátor jazyka Visual Basic Definice
Overridable Umožňuje přepsání člena třídy v odvozené třídě.
Overrides Přepíše virtuální (přepisovatelný) člen definovaný v základní třídě.
NotOverridable Zabraňuje přepsání člena v zděděné třídě.
MustOverride Vyžaduje, aby byl člen třídy přepsán 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 však rozhraní neposkytují implementaci. Implementují se podle tříd a definují se jako samostatné entity od tříd. Rozhraní představuje kontrakt v tom, že třída, která implementuje rozhraní musí implementovat každý aspekt tohoto rozhraní přesně tak, jak je definován.

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 .NET mohou obsahovat parametry typu, které definují typy objektů, které mohou ukládat nebo používat. Nejběžnějším příkladem obecných typů je kolekce, kde můžete určit typ objektů, které se mají uložit v kolekci.

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 jakoukoli 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é