Dela via


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 Onkan 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:

Object

  MarshalByRefObject

    Component

      Control

        ScrollableControl

          ContainerControl

            Form

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.

Se även