Sdílet prostřednictvím


Deklarace proměnné objektu (Visual Basic)

K deklaraci proměnné objektu použijete příkaz normální deklarace. Pro datový typ zadáte buď Object (tj. datový typ objektu), nebo konkrétnější třídu, ze které se má objekt vytvořit.

Deklarování proměnné jako Object je stejné jako deklarování proměnné jako System.Object.

Když deklarujete proměnnou s konkrétní třídou objektu, bude mít přístup ke všem metodám a vlastnostem vystaveným danou třídou a třídám, ze kterých dědí. Pokud proměnnou deklarujete pomocí Object, bude mít přístup pouze ke členům Object třídy, pokud se nerozhodnete Option Strict Off povolit pozdní vazbu.

Syntaxe deklarace

Pomocí následující syntaxe deklarujte proměnnou objektu:

Dim variablename As [New] { objectclass | Object }  

V deklaraci můžete také zadat veřejné, chráněné, přítel, Protected Friend, soukromé, sdílené nebo statické. Následující ukázkové deklarace jsou platné:

Private objA As Object  
Static objB As System.Windows.Forms.Label  
Dim objC As System.OperatingSystem  

Pozdní vazby a časná vazba

Někdy je konkrétní třída neznámá, dokud se váš kód nespustí. V tomto případě musíte deklarovat proměnnou objektu s datovým typem Object . Tím se vytvoří obecný odkaz na jakýkoli typ objektu a konkrétní třída je přiřazena za běhu. Tomu se říká pozdní vazba. Pozdní vazba vyžaduje další dobu provádění. Omezuje také kód na metody a vlastnosti třídy, kterou jste k ní nedávno přiřadili. To může způsobit chyby za běhu, pokud se váš kód pokusí o přístup k členům jiné třídy.

Pokud znáte konkrétní třídu v době kompilace, měli byste deklarovat proměnnou objektu, která má být z této třídy. Tomu se říká časná vazba. Časná vazba zlepšuje výkon a zaručuje přístup kódu ke všem metodám a vlastnostem konkrétní třídy. V předchozím příkladu deklarace, pokud proměnná objA používá pouze objekty třídy System.Windows.Forms.Label, byste měli zadat As System.Windows.Forms.Label v jeho deklaraci.

Výhody včasné vazby

Deklarace proměnné objektu jako konkrétní třídy poskytuje několik výhod:

  • Automatická kontrola typů

  • Garantovaný přístup ke všem členům konkrétní třídy

  • Podpora Technologie Microsoft IntelliSense v Editoru kódu

  • Lepší čitelnost kódu

  • Méně chyb v kódu

  • Chyby zachycené v době kompilace místo doby běhu

  • Rychlejší spouštění kódu

Přístup k členům proměnných objektů

Při Option Strict odevzdání Onmůže proměnná objektu přistupovat pouze k metodám a vlastnostem třídy, se kterou ji deklarujete. Toto dokládá následující příklad.

' Option statements must precede all other source file lines.  
Option Strict On  
' Imports statement must precede all declarations in the source file.  
Imports System.Windows.Forms  
Public Sub accessMembers()  
    Dim p As Object  
    Dim q As System.Windows.Forms.Label  
    p = New System.Windows.Forms.Label  
    q = New System.Windows.Forms.Label  
    Dim j, k As Integer  
    ' The following statement generates a compiler ERROR.  
    j = p.Left  
    ' The following statement retrieves the left edge of the label in pixels.  
    k = q.Left  
End Sub  

V tomto příkladu p lze použít pouze členy Object samotné třídy, které nezahrnují Left vlastnost. Na druhou stranu byl q deklarován jako typ Label, takže může používat všechny metody a vlastnosti Label třídy v System.Windows.Forms oboru názvů.

Flexibilita proměnných objektů

Při práci s objekty v hierarchii dědičnosti máte na výběr, kterou třídu použít k deklarování proměnných objektu. Při této volbě musíte vyvážit flexibilitu přiřazování objektů proti přístupu k členům třídy. Představte si například hierarchii dědičnosti, která vede ke System.Windows.Forms.Form třídě:

Object

  MarshalByRefObject

    Component

      Control

        ScrollableControl

          ContainerControl

            Form

Předpokládejme, že vaše aplikace definuje třídu formuláře s názvem specialForm, která dědí z třídy Form. Můžete deklarovat proměnnou objektu, která odkazuje konkrétně na specialForm, jak ukazuje následující příklad.

Public Class specialForm  
    Inherits System.Windows.Forms.Form  
    ' Insert code defining methods and properties of specialForm.  
End Class  
Dim nextForm As New specialForm  

Deklarace v předchozím příkladu omezuje proměnnou nextForm na objekty třídy specialForm, ale také zpřístupňuje nextFormvšechny metody a vlastnosti specialForm , stejně jako všechny členy všech tříd, ze kterých specialForm dědí.

Proměnnou objektu můžete obecněji deklarovat tak, že ji deklarujete jako typ Form, jak ukazuje následující příklad.

Dim anyForm As System.Windows.Forms.Form  

Deklarace v předchozím příkladu umožňuje přiřadit libovolný formulář v aplikaci .anyForm Ačkoli však anyForm může přistupovat ke všem členům třídy Form, nemůže použít žádné z dalších metod nebo vlastností definovaných pro konkrétní formuláře, například specialForm.

Pro odvozené třídy jsou k dispozici všechny členy základní třídy, ale další členy odvozené třídy nejsou pro základní třídu k dispozici.

Viz také