Delen via


Declaratie van objectvariabele (Visual Basic)

U gebruikt een normale declaratie-instructie om een objectvariabele te declareren. Voor het gegevenstype geeft u op (dat wil gezegd Object het objectgegevenstype) of een specifiekere klasse waaruit het object moet worden gemaakt.

Het declareren van een variabele als Object hetzelfde is als het declareren ervan als System.Object.

Wanneer u een variabele declareert met een specifieke objectklasse, heeft deze toegang tot alle methoden en eigenschappen die door die klasse worden weergegeven en de klassen waaruit deze wordt overgenomen. Als u de variabele declareert met Object, heeft deze alleen toegang tot de leden van de Object klasse, tenzij u late Option Strict Off binding toestaat.

Syntaxis van declaratie

Gebruik de volgende syntaxis om een objectvariabele te declareren:

Dim variablename As [New] { objectclass | Object }  

U kunt ook openbare, beveiligde, vriend, Protected Friendprivé, gedeeld of statisch opgeven in de declaratie. De volgende voorbeelddeclaraties zijn geldig:

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

Late binding en vroege binding

Soms is de specifieke klasse onbekend totdat uw code wordt uitgevoerd. In dit geval moet u de objectvariabele declareren met het Object gegevenstype. Hiermee maakt u een algemene verwijzing naar elk type object en wordt de specifieke klasse tijdens runtime toegewezen. Dit wordt late binding genoemd. Voor late binding is extra uitvoeringstijd vereist. Het beperkt uw code ook tot de methoden en eigenschappen van de klasse die u het meest recent hebt toegewezen. Dit kan runtimefouten veroorzaken als uw code probeert toegang te krijgen tot leden van een andere klasse.

Wanneer u de specifieke klasse tijdens het compileren kent, moet u de objectvariabele declareren om van die klasse te zijn. Dit wordt vroege binding genoemd. Vroege binding verbetert de prestaties en garandeert uw codetoegang tot alle methoden en eigenschappen van de specifieke klasse. Als in de voorgaande voorbeelddeclaraties alleen objecten van klasse System.Windows.Forms.Labelworden gebruikt, objA moet u opgeven As System.Windows.Forms.Label in de declaratie.

Voordelen van vroege binding

Het declareren van een objectvariabele als een specifieke klasse biedt verschillende voordelen:

  • Automatische typecontrole

  • Gegarandeerde toegang tot alle leden van de specifieke klasse

  • Microsoft IntelliSense-ondersteuning in de Code-editor

  • Verbeterde leesbaarheid van uw code

  • Minder fouten in uw code

  • Fouten die zijn opgetreden tijdens het compileren in plaats van runtime

  • Snellere uitvoering van code

Toegang tot objectvariabeleleden

Wanneer Option Strict deze is ingeschakeld, heeft een objectvariabele Onalleen toegang tot de methoden en eigenschappen van de klasse waarmee u deze declareert. In het volgende voorbeeld ziet u dit.

' 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  

In dit voorbeeld p kunnen alleen de leden van de Object klasse zelf worden gebruikt, die de Left eigenschap niet bevatten. Aan de andere kant q is gedeclareerd dat het van het type Labelis, zodat alle methoden en eigenschappen van de Label klasse in de System.Windows.Forms naamruimte kunnen worden gebruikt.

Flexibiliteit van objectvariabelen

Wanneer u met objecten in een overnamehiërarchie werkt, kunt u kiezen welke klasse u wilt gebruiken voor het declareren van uw objectvariabelen. Bij het maken van deze keuze moet u de flexibiliteit van objecttoewijzing afwegen tegen toegang tot leden van een klasse. Denk bijvoorbeeld aan de overnamehiërarchie die leidt tot de System.Windows.Forms.Form klasse:

Object

  MarshalByRefObject

    Component

      Control

        ScrollableControl

          ContainerControl

            Form

Stel dat uw toepassing een formulierklasse definieert die wordt aangeroepen specialForm, die wordt overgenomen van klasse Form. U kunt een objectvariabele declareren die specifiek specialFormnaar verwijst, zoals in het volgende voorbeeld wordt weergegeven.

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

De declaratie in het voorgaande voorbeeld beperkt de variabele nextForm tot objecten van klasse specialForm, maar maakt ook alle methoden en eigenschappen beschikbaar specialForm voor nextForm, evenals alle leden van alle klassen waaruit specialForm ze overnemen.

U kunt een objectvariabele algemener maken door deze als type Formte declareren, zoals in het volgende voorbeeld wordt weergegeven.

Dim anyForm As System.Windows.Forms.Form  

Met de declaratie in het voorgaande voorbeeld kunt u elk formulier in uw toepassing toewijzen aan anyForm. Hoewel anyForm u echter toegang hebt tot alle leden van de klasse Form, kan deze geen van de aanvullende methoden of eigenschappen gebruiken die zijn gedefinieerd voor specifieke formulieren, zoals specialForm.

Alle leden van een basisklasse zijn beschikbaar voor afgeleide klassen, maar de extra leden van een afgeleide klasse zijn niet beschikbaar voor de basisklasse.

Zie ook