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.6. Conversie en Strict 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.

Vermijd impliciete conversie en dus het "per-ongeluk" bekomen van vreemde, onverwachte omzettingen (die moeilijk te debuggen zijn indien foutief) door Compiler optie Option Strict op On te zetten en dus enkel expliciet te kunnen converteren (in geval van narrowing).  Waardoor men zich zeker bewust zal zijn van het bekomen van de vreemde of onverwachte omzettingen.

14.6.1. Expliciet Converteren

Naast het impliciet converteren, kunnen we dus ook expliciet converteren, waarbij we opgeven VAN welk datatype, NAAR welk datatype we wensen te converteren.

Expliciet converteren kan door een aantal shared functies uit de klasse System.Convert te gaan gebruiken.  Deze functies hebben tal van overladen versies om argumentwaarden van zowat alle intrensic types aan te kunnen doorgeven.
Visual Basic 2012 Broncode - Codevoorbeeld 377
Option Explicit On
Option Strict On
Module Example1
    Sub Main()
        Dim lngGetal As Long
        Dim dblGetal As Double = 34.5
        Dim intGetal As Integer = 100
        Dim bytGetal As Byte

        bytGetal = System.Convert.ToByte(dblGetal)                     ' (1)
        Console.WriteLine(bytGetal)                                    ' (4)
        bytGetal = System.Convert.ToByte(intGetal)

        lngGetal = System.Convert.ToInt64(bytGetal)                    ' (2)
        lngGetal = System.Convert.ToInt64(intGetal)

        Dim object1 As Object = Convert.ChangeType(123, TypeCode.Byte) ' (3)
        Dim object2 As Object = _
                             Convert.ChangeType(-1, Convert.GetTypeCode(False))
        Console.WriteLine(object2)                                     ' "True"

        Console.ReadLine()
    End Sub
End Module
Console Application Output
34
True
(1) EXPLICIETE NARROWING CONVERSIES : excepties kunnen voorkomen

(2) EXPLICIETE WIDENING CONVERSIE : excepties zullen hier nooit voorkomen

Ook voor andere intrensic types bestaan conversie functies, bijvoorbeeld :
- System.Convert.ToInt16(...)    voor conversie naar Short
- System.Convert.ToInt32(...)    voor conversie naar Integer
- System.Convert.ToSingle(...)   voor conversie naar Single
- System.Convert.ToDouble(...)   voor conversie naar Double
- System.Convert.ToBoolean(...)  voor conversie naar Boolean
- System.Convert.ToDateTime(...) voor conversie naar Date
- System.Convert.ToChar(...)     voor conversie naar Char
- ...

(3) EXPLICIETE CONVERSIE RESULTEREND IN BOXING OPERATIE via Convert.ChangeType(...) :
de waarden (eerste argumentwaarde) worden omgezet naar het opgegeven type (2e argumentwaarde, van enumeratietype System.TypeCode) en zo geboxed in een Object variabele waarvan de referentie wordt opgeleverd

Method Convert.GetTypeCode(obj As Object) As TypeCode is een shared member die kan gebruikt worden om de TypeCode-enumeratie waarde van een bepaalde expressie te achterhalen.

Ook de expliciete conversies kunnen de "vreemde onverwachte" resultaten opleveren (4) (zoals naartoe werd verwezen in vorig voorbeeld).  Maar doordat men hier expliciet converteert, is de kans op zen minst groter dat men zich bewust zal zijn van dit soort van omzetting.

14.6.2. Converteren naar String

Hieronder zien we een voorbeeld hoe men expliciet naar het String-formaat kan converteren.
Visual Basic 2012 Broncode - Codevoorbeeld 378
Class Person
    Public Property Name As String
    Public Overrides Function ToString() As String
        Return Name
    End Function
End Class
Class Example2
    Public Shared Sub Main()
        Console.WriteLine(System.Convert.ToString(123))
        Console.WriteLine((123).ToString())
        Dim a As Integer = 123
        Console.WriteLine(a.ToString())
        '
        Console.WriteLine(System.Convert.ToString(1234.5678))
        Console.WriteLine((1234.5678).ToString())
        Dim b As Double = 1234.5678
        Console.WriteLine(b.ToString())
        '
        Console.WriteLine(System.Convert.ToString(True))
        Console.WriteLine((True).ToString())
        Dim c As Boolean = True
        Console.WriteLine(c.ToString())
        '
        Console.WriteLine(System.Convert.ToString("a"c))
        Console.WriteLine(("a"c).ToString())
        Dim d As Char = "a"c
        Console.WriteLine(d.ToString())
        '
        Console.WriteLine(System.Convert.ToString(#3/20/2005#))
        Console.WriteLine((#3/20/2005#).ToString())
        Dim e As Date = #3/20/2005#
        Console.WriteLine(e.ToString())
        '
        Dim object1 As Object = 5
        Console.WriteLine(System.Convert.ToString(object1))
        Console.WriteLine(object1.ToString())
        '
        Dim object2 As Object = New System.Object
        Console.WriteLine(System.Convert.ToString(object2))
        Console.WriteLine(object2.ToString())
        '
        Dim person1 As Person = New Person With {.Name = "John"}
        Console.WriteLine(System.Convert.ToString(person1))
        Console.WriteLine(person1.ToString())
        '
        Dim object3 As Object
        Console.WriteLine(System.Convert.ToString(object3))
        'Console.WriteLine(object3.ToString())                  ' runtime error
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
123
123
123
1234,5678
1234,5678
1234,5678
True
True
True
a
a
a
20/03/2005 0:00:00
20/03/2005 0:00:00
20/03/2005 0:00:00
5
5
System.Object
System.Object
John
John
De System.Convert.ToString(...) method zet de opgegeven argumentwaarde om naar een tekstuele representatie, dit wordt gebaseerd op de ToString() implementatie van dat type zelf.

Zoals we reeds weten kunnen we ook zelf deze implementatie bepalen, door die implementatie te gaan overschrijven, zoals in bovenstaand voorbeeld is gebeurt voor het Person type.

Bij Convert.ToString(...) zullen nooit runtimefouten optreden.  Elk type beschikt immers over een ToString() implementatie, minimaal is deze implementatie overgeërfd van het System.Object-basistype.

Zelfs al wordt aan de Convert.ToString(...) functie Nothing doorgegeven dan nog zal geen exceptie optreden.  Vooraleer de ToString() implementatie van het doorgegeven argument wordt aangeroepen zal hierop een controle gebeuren.

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