|
Dit artikel is gepubliceerd op zondag 31 juli 2011 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. BindingDe 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 2010 Broncode Option Strict OffClass Person Public Property Name() As String Get Name = "name" End Get Set( ByVal value As String) End Set End PropertyEnd ClassClass Example1 Public Shared Sub Main() Dim person1 As Person = New Person End SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
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 2010 Broncode Option Strict OffClass Counter Public Property Value() As Integer Get Value = 11 End Get Set( ByVal value As Integer) End Set End PropertyEnd ClassClass Example2 Public Shared Sub Main() Dim object1 As Object = GetObject() Console.WriteLine(object1.Name) Dim object2 As Object = GetObject() Console.WriteLine(object2.Value) 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 FunctionEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
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 zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|