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.5. Conversie en Permissive Type Semantics

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.

Compiler optie Option Strict On ("strict type semantics") zorgt ook voor het niet toelaten van impliciete narrowing conversie.  Om toch impliciete narrowing conversie te demonstreren gaan we hier Option Strict of Off ( "permissive type semantics") zetten.

Conversie is het at runtime omzetten van data naar een ander formaat.  Conversie houdt in dat men aan variabelen van bepaalde datatypes waarden gaat toekennen die geformuleerd zijn aan de hand van expressies van bepaalde andere datatypes.

Impliciete conversie staat tegenover expliciete conversie, waarbij men expliciet opgeeft VAN welk datatype NAAR welk ander datatype men wil converteren.

Narrowing conversie vindt plaats wanneer men van een "groter" naar een "kleiner" datatype wil converteren.  "Kleiner" kan slaan op een mindere opslag-capaciteit of een "kleinere" precisie of nauwkeurigheid.
Widening conversie is het tegenovergestelde van narrowing conversie, daar gaat men van een "kleiner" naar een "groter" datatype converteren.

Bij narrowing conversie kunner er runtimefouten optreden, bijvoorbeeld een OverFlowException indien het bereik van het doeldatatype te beperkt zou zijn.
Bij onmogelijk te converteren data (bijvoorbeeld : Dim intGetal As Integer = "abc") treedt at runtime een InvalidCastException op.

In onderstaand voorbeeld zie je hoe :
- (1) een Integer waarde wordt toegekend aan een Long variabele ( impliciete widening conversie)
- (2) een Double waarde wordt toegekend aan een Integer variabele ( impliciete narrowing conversie)
- (3) een String waarde wordt toegekend aan een Char variabele ( impliciete narrowing conversie)
- (4) een String waarde wordt toegekend aan een Date variabele ( impliciete narrowing conversie)
Visual Basic 2012 Broncode - Codevoorbeeld 376
Option Explicit On
Option Strict Off
Module Example
    Sub Main()
        Dim intGetal As Integer = 25
        Dim lngGetal As Long = intGetal                                    ' (1)
        Console.WriteLine(lngGetal)
        '
        Dim dblGetal As Double = 33.5
        intGetal = dblGetal                                                ' (2)
        Console.WriteLine(intGetal)
        dblGetal = 34.5
        intGetal = dblGetal                                                ' (2)
        Console.WriteLine(intGetal)
        Dim chrLetter As Char = "abcdef"                                   ' (3)
        Console.WriteLine(chrLetter)
        Dim dteDatum As Date = "3/5/2005"                                  ' (4)
        Console.WriteLine(dteDatum)
        '
        'intGetal = "abcdef"                                               ' (5)
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
25
34
34
a
3/05/2005 0:00:00
Het nadeel van impliciete conversie kan juist zijn dat het impliciet (en dus niet expliciet) gebeurt.  Waarmee ik bedoel dat de programmeur in kwestie zich niet (of niet voldoende) bewust is van het feit dat er geconverteerd zal worden.
Conversie (en in hoofdzaak narrowing conversie) kan immers leiden tot vreemde, onverwachte of zelf moeilijk te voorspellen resultaten.

Wat juist gebeurt bij conversie kan erg verschillend zijn, zo zie je dat :
- regel (2) : 33.5 wordt afgerond naar boven en 34.5 wordt afgerond naar beneden ("bankers rounding" : .5 bij even getallen zal naar beneden worden afgerond en .5 bij oneven getallen zal naar boven worden afgerond)
- regel (3) : "abcdef" wordt afgekapt naar 1 karakter "a"c
- regel (4) : "3/5/2005" wordt geïnterpreteerd als "3 mei 2005", en dus bijvoorbeeld niet als "5 maart 2005" (dit wordt gebaseerd op de culture-info)

Bij conversie kunnen er (indien de te-converteren-data niet converteerbaar is naar het doel formaat) runtimefouten optreden.  Zo zal regel (5) leiden tot een fout omdat de String "abcdef" niet omzetbaar is naar een Integer formaat.

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