Deklaration av objektvariabel (Visual Basic)
Du använder en normal deklarationssats för att deklarera en objektvariabel. För datatypen anger du antingen Object
(dvs . objektdatatypen) eller en mer specifik klass som objektet ska skapas från.
Deklarera en variabel som är samma som Object
att deklarera den som System.Object.
När du deklarerar en variabel med en specifik objektklass kan den komma åt alla metoder och egenskaper som exponeras av den klassen och de klasser som den ärver från. Om du deklarerar variabeln med Objectkan den endast komma åt medlemmarna i Object klassen, såvida du inte vänder Option Strict Off
dig för att tillåta sen bindning.
Deklarationssyntax
Använd följande syntax för att deklarera en objektvariabel:
Dim variablename As [New] { objectclass | Object }
Du kan också ange Offentlig, Skyddad, Vän, Protected Friend
, Privat, Delad eller Statisk i deklarationen. Följande exempeldeklarationer är giltiga:
Private objA As Object
Static objB As System.Windows.Forms.Label
Dim objC As System.OperatingSystem
Sen bindning och tidig bindning
Ibland är den specifika klassen okänd tills koden körs. I det här fallet måste du deklarera objektvariabeln med Object
datatypen. Detta skapar en allmän referens till alla typer av objekt och den specifika klassen tilldelas vid körning. Detta kallas för sen bindning. Sen bindning kräver ytterligare körningstid. Den begränsar även koden till metoderna och egenskaperna för den klass som du senast har tilldelat den. Detta kan orsaka körningsfel om koden försöker komma åt medlemmar i en annan klass.
När du känner till den specifika klassen vid kompileringstiden bör du deklarera att objektvariabeln tillhör den klassen. Detta kallas tidig bindning. Tidig bindning förbättrar prestanda och garanterar din kodåtkomst till alla metoder och egenskaper för den specifika klassen. Om variabeln objA
endast använder objekt av klassen System.Windows.Forms.Labeli föregående exempeldeklarationer bör du ange As System.Windows.Forms.Label
i deklarationen.
Fördelar med tidig bindning
Om du deklarerar en objektvariabel som en specifik klass får du flera fördelar:
Automatisk typkontroll
Garanterad åtkomst till alla medlemmar i den specifika klassen
Microsoft IntelliSense-stöd i kodredigeraren
Förbättrad läsbarhet för din kod
Färre fel i koden
Fel som fångas vid kompileringstid i stället för körningstid
Snabbare kodkörning
Åtkomst till objektvariabelmedlemmar
När Option Strict
är aktiverat On
kan en objektvariabel bara komma åt metoderna och egenskaperna för klassen som du deklarerar den med. I följande exempel visas detta.
' 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
I det här exemplet p
kan du bara använda medlemmarna i Object själva klassen, som inte inkluderar Left
egenskapen. Å andra sidan q
har deklarerats vara av typen Label, så att den kan använda alla metoder och egenskaper för Label klassen i System.Windows.Forms namnområdet.
Flexibilitet för objektvariabler
När du arbetar med objekt i en arvshierarki kan du välja vilken klass som ska användas för att deklarera objektvariabler. När du gör det här valet måste du balansera flexibiliteten för objekttilldelning mot åtkomst till medlemmar i en klass. Tänk till exempel på arvshierarkin som leder till System.Windows.Forms.Form klassen:
Anta att ditt program definierar en formulärklass med namnet specialForm
, som ärver från klassen Form. Du kan deklarera en objektvariabel som specifikt refererar till specialForm
, som i följande exempel visas.
Public Class specialForm
Inherits System.Windows.Forms.Form
' Insert code defining methods and properties of specialForm.
End Class
Dim nextForm As New specialForm
Deklarationen i föregående exempel begränsar variabeln nextForm
till objekt av klassen specialForm
, men gör även alla metoder och egenskaper specialForm
för tillgängliga för nextForm
, samt alla medlemmar i alla klasser som specialForm
ärver.
Du kan göra en objektvariabel mer allmän genom att deklarera att den är av typen Form, vilket visas i följande exempel.
Dim anyForm As System.Windows.Forms.Form
Med deklarationen i föregående exempel kan du tilldela valfritt formulär i ditt program till anyForm
. Men även om anyForm
kan komma åt alla medlemmar i klassen Formkan den inte använda någon av de ytterligare metoder eller egenskaper som definierats för specifika formulär som specialForm
.
Alla medlemmar i en basklass är tillgängliga för härledda klasser, men de ytterligare medlemmarna i en härledd klass är inte tillgängliga för basklassen.