Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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é vazby
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 dodatečný čas na 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á statická 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ů
Když je Option Strict
zapnuto On
, proměnná objektu může přistupovat pouze k metodám a vlastnostem té třídy, se kterou ji deklarujete. Následující příklad to ilustruje.
' 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ě:
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 specialForm
všechny metody a vlastnosti nextForm
, 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.