Visual Basic 2012 Voorbeelden
   

visual basic 2012 broncode voorbeelden

Blijf op de hoogte van de recente aanpassingen op vbvoorbeelden!

Microsoft Visual Studio 2012Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

14.1. Early versus Late Bound Objects

Print Email Deel op Twitter Deel op Facebook

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

Het uitkiezen van een zo specifiek mogelijke datatype voor uw variabelen en uw returntypes heeft als voordeel dat "late binding" wordt vermeden.

14.1.1. Binding

De Visual Basic compiler verrichte een proces (dat "binding" wordt genoemd) ( verwar dit niet met messagebinding) wanneer een object toegekend wordt aan een referencetype variabele.  Een object wordt bijvoorbeeld "early bound" wanneer zen referentie toegekend wordt aan een variabele van een specifiek referencetype (ander type dan System.Object).

"Early binding" zorgt ervoor dat de compiler geheugen kan alloceren en andere optimalisaties kan verrichten voordat de applicatie wordt uitgevoerd.

In onderstaand voorbeeld wordt een variabele van het type Person gedeclareerd en opgevuld met een Person object.
Visual Basic 2012 Broncode - Codevoorbeeld 365
Option Strict Off
Class Person
    Public Property Name() As String
        Get
            Name = "name"
        End Get
        Set(ByVal value As String)
            ' ...
        End Set
    End Property
End Class
Class Example1
    Public Shared Sub Main()
        Dim person1 As Person = New Person
    End Sub
End Class
De instantie toegekend aan person1 is hier early bound.

In tegenstelling hiermee, zal een object "late bound" worden wanneer het wordt toegekend aan een variabele gedeclareerd van het type System.Object.
Variabelen van dit type kunnen referenties bijhouden van eender welk object, maar ontbreken veel van de voordelen van early bound objectvariabelen.

In onderstaand voorbeeld wordt een System.Object variabele opgevuld met een referentie van bepaald object dat wordt opgeleverd door de GetObject() functie.
Visual Basic 2012 Broncode - Codevoorbeeld 366
Option Strict Off
Class Counter
    Public Property Value() As Integer
        Get
            Value = 11
        End Get
        Set(ByVal value As Integer)
            ' ...
        End Set
    End Property
End Class
Class Example2
    Public Shared Sub Main()
        Dim object1 As Object = GetObject()
        Console.WriteLine(object1.Name)     ' (1)
        '
        Dim object2 As Object = GetObject()
        Console.WriteLine(object2.Value)    ' (2)
        '
        'Console.WriteLine(object1.Value)   ' (3) runtime type-error
        '
        Console.ReadLine()
    End Sub
    Public Shared Function GetObject() As Object
        Static counter As Integer
        counter += 1
        If counter Mod 2 = 0 Then
            GetObject = New Counter
        Else
            GetObject = New Person
        End If
    End Function
End Class
Console Application Output
name
11
Hier is sprake van late binding bij de toekenningen aan de Object variabelen object1 en object2.

Early binding verdient de voorkeur op late binding omdat deze toelaten dat de compiler belangrijke optimalisaties kan verrichten die leiden tot efficiëntere applicaties.  Early bound objecten zijn significant sneller dan late bound objecten (omdat niet at runtime moet worden onderzocht wat het dynamisch type (type at runtime) is) en maken de code beter leesbaar en onderhoudbaar door exact te definiëren welke soort van objecten gebruikt worden.

Early binding zorgt er ook voor dat minder runtimefouten optreden omdat het de compiler toelaat typefouten at compiletime reeds te gaan rapporteren.  Regel (3) bijvoorbeeld veroorzaakt een runtime type-error omdat at compiletime deze fout nog niet kon worden geconstateerd, de compiler wist immer nog niet met welk soort object de variabele object1 zou worden opgevuld.

Bemerk dat de code op regel (1), (2) en (3) slechts mogelijk is onder "permissive type semantics" (Option Strict Off).  Normalitair ("strict type semantics" of Option Strict On) zal de compiler op basis van het statisch type van de ontvangerexpressie (hier Object gezien de variabelen object1 en object2 van dit type zijn gedeclareerd) beslissen dat de members Name en Value niet behoren tot de publieke interface van dit statisch type.
Visual Studio : Een bijkomend voordeel van early binding is de mogelijkheid die het oplevert om bepaalde nuttige functionaliteiten uit de Visual Studio IDE te gaan gebruiken (IntelliSense).
Zoals reeds werd aangegeven kan het gebruik van het System.Object type ( en dus late binding) bepaalde flexibiliteit opleveren.  Maar vermijd toch zoveel mogelijk late binding tenzij bovenvermelde flexibiliteit noodzakelijk is.

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.