Variant
De Variant bestaat niet meer, dit is het object geworden.
Dit x as variant wordt Dim x as object
Integers
De Integer is een Short geworden, de Long is een Integer geworden.
Dim x As Integer wordt Dim x as Short
Dim y as Long wordt Dim y as Integer
Currency
De Currency is een Decimal geworden.
Dim x As Currency wordt Dim x as Decimal
Date
De datum/tijd is niet meer te benaderen als een double. Vroeger kon je een datum/ tijd als een double benaderen, nu is dat helaas over.
Wanneer je de datum/tijd toch als double wil zien, moet je de functie ToOADate gebruiken, en terug converteren gebeurd met FromOADate.
Voorbeeld:
Dim datum as Date
Dim dblDatum as Double
DblDatum = Datum.ToOaDate
Fixed length strings
String variabelle met een vaste waarde bestaan niet meer in .Net. Je kan de functionaliteit nog wel bereiken door het VB6 object aan te spreken, maar doe dit niet uit geheugen besparende overwegingen, omdat dit object meer geheugen kost dan het declareren van een normale string.
Dim strString as String * 100 wordt Dim strString as New VB6.FixedLengthString(100)
Type
Het Type keyword is veranderd in Structure.
code:
1
2
3
| Type MyType
MyVariable as Integer
End Type |
Wordt:
code:
1
2
3
| Structure MyType
Dim MyVariable as Short
End Structure |
True
De True waarde was altijd te behandelen als een waarde van 1. In VB .Net is deze waarde 1 geworden.
Empty
Varianten worden in VB6 altijd als EMPTY aangemaakt. Getallen worden altijd standaard 0, en string waarde worden een vbNullString.
In .Net worden varianten altijd als NOTHING aangemaakt. ( Dus met IsNothing te controleren ). Getallen worden altijd nog standaard 0 en string waarden nog steeds VbNullString.
Null
De Null waarde in .Net wordt niet meer ondersteund. ADO.NET waarde die NULL zijn, worden weergegeven als een object van het type DBNull.
If x Is Null then msgbox Null wordt If IsDbNull(x) then msgbox Null
Locale variabellen zijn blok geactiveerd
Gedeclareerde variabellen zijn nu echt per blok actief en te declareren. In het volgende voorbeeld:
code:
1
2
3
4
5
6
7
8
| Sub Test(x As Integer)
If x < 0 Then
Dim y As Integer = - x
'...
Else
'...
End If
End Sub |
Zou de variabelle y alleen actief zijn in het x<0 = true gedeelte, buiten dit blok ( ook niet in het else gedeelte ), is de y niet meer gedeclareerd. Dit geeft de mogelijkheid om geheugen- efficientie te vergroten. Je kan natuurlijk de y ook gewoon op sub nivo of module nivo etc declareren.
Arrays
Met Option Base kon je aangeven of je arrays op 0 of op 1 werden geinitializeert. In .Net kan dit niet meer en beginnen alle arrays gewoon op 0.
Set en Let statements
Jammer, maar deze statements bestaan niet meer in .net.
Aanroepen van procedures
Alle procedures moeten in .Net worden aangeroepen met haakjes eromheen en met de call procedure ervoor. Je kon in VB6 wel eens een procedure als volgt aanroepen:
DoeDit Met deze string
Wordt:
Call DoeDit(Met deze string)
Static procedures
In VB6 kon je een procedure als volgt declareren:
code:
1
2
3
4
5
6
7
| Static Sub Toongetal(intgetal as integer)
Dim intX as Integer
Msgbox intX
Intx = intgetal
End sub |
Alle variabellen binnen de sub waren dan statisch. Als je de sub 1 maal uitvoert met waarde 30, zal deze de eerste keer als message 0 teruggeven, maar de intX wordt dan wel ( ook buiten de sub ) nog onthouden. De volgende keer dat een getal wordt meegegeven, zal dus eerst het voorgaande nummer ( 30 ) getoond worden, voordat dit getal wordt overschreven.
In VB .NET is dit wat anders, static subs bestaan niet meer, maar variabellen kunnen wel als statisch worden opgegeven. Dit moet dan wel PER variabelle opgegeven worden ( in VB6 werden ALLE variabellen binnen een static sub automatisch statisch ). Voorbeeld om deze sub in .net te maken:
code:
1
2
3
4
5
6
7
| Sub Toongetal(intgetal as integer)
Static intx as Integer
Msgbox intx
Intx = intgetal
End sub |
Byval en Byref
In VB6 worden alle parameters waarbij niet specifiek ByVal of ByRef opgegeven wordt geinterpreteerd als ByRef. In .NET wordt dit standaar ByVal.
IsMissing
In VB6 kan je voor optionele varianten parameters in een sub kijken of ze zijn meegegeven door de functie IsMissing ( let op, werkt alleen op varianten!, strings zijn standaard vbnullstring en getallen worden 0 als ze niet zijn meegegeven ).
In VB .NET bestaat de IsMissing niet meer, omdat je voor alle optionele parameters een default waarde moet meegeven. Als ze dan dus niet meegegeven zijn krijgen ze die default waarde.
As Any parameter
In een Declare type kan je een type die voor 2 of meer waarde doorgegeven kan worden declareren als AS ANY ( in VB6 ), je kan dan dus bijvoorbeeld een integer of een string meegeven. Voorbeeld:
code:
1
2
3
4
5
6
7
8
| Private Declare Function GetPrivateProfileString _
Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Integer, _
ByVal lpFileName As String) As Integer |
In VB .NET is dit veranderd. Je moet hier met het overloads statement alle mogelijke combinaties neerzetten, zodat de compiler zelf kiest welke deze neemt. Als de as any dus een integer en een string kan krijgen, zou je dat op deze manier kunnen declareren:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| Overloads Private Declare Function GetPrivateProfileStringKey _
Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Integer, _
ByVal lpFileName As String) As Integer
Overloads Private Declare Function GetPrivateProfileStringNullKey _
Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As Integer, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Integer, _
ByVal lpFileName As String) As Integer |
De while loop
In VB6 wordt de While loop afgesloten met Wend. Om consistent te blijven met de overige loop structuren wordt nu in .NET afgesloten met End While.
Goto en Gosub
Alleen on error goto werkt nog in VB .NET. Alle overige gotos zou je moeten vervangen door een case statement en worden niet langer ondersteund.
File I/O
Het openen van files is drastisch veranderd om alle verschillende talen te ondersteunen. Open iets voor input als iets, zou betekenen dat open een reserved word zou zijn, en dat willen ze niet. Het open statement is daarom aangepast:
Open Mijnbestand.txt For input as #1 wordt
FileOpen( 1, Mijnbestand.txt, OpenMode.Input )
Debug.Print
In VB.Net is het Immediate window vervangen door een Immediate en een Output scherm. Het immediate window wordt gebruikt zodat gebruikers waarde kunnen invoeren en de resultaten kunnen bekijken als een applicatie in de pauze modus staat. Het Output scherm wordt gebruikt om build informatie en programma output naartoe te schrijven.
Hierdoor is Debug.Print vervangen door Debug.Writeline
Name property
De name property die je in VB6 kan gebruiken om bijvoorbeeld forms aan te geven wordt in .Net niet meer ondersteund in runtime. Je kan nog wel door de Controls collectie lopen om een control met een bepaalde naam te vinden. Je kan de .Net framework System.Reflection classes gebruiken om het te vinden.
Caption property
De Caption property is dood in .NET. Alles wordt consistent op .text gehouden.
Tag property
Aan de tag property kan je eigen waarden meegeven aan je control. Je had dit in VB 6 nodig omdat je de built in controls niet zelf uit kon breiden. In .Net kan dit wel, en als je dan een tag nodig hebt, moet je dus even een property bijbouwen om deze tag op te slaan.
ScaleMode
In VB6 kan je met de scalemode aangeven in welke eenheid geschaald moet worden. In .NET wordt alles in pixels geschaalt. Daarbij heeft .NET een betere manier om met resize om te gaan. De AutoScaleBaseResize property past automatisch de schaal aan aan de resolutie van het scherm en het lettertype dat je gebruikt.
Fonts
Fonts en controls kunnen in VB6 alle windows fonts gebruiken. In .NET kan je alleen nog maar TrueType of OpenType fonts gebruiken.
Screen.Mousepointer
Deze feature werkt momenteel niet in vb .net.
Timers
In VB6 kan je een timer interval instellen op 0, de timer is dan disabled. Een timer control heeft echter ook een property enabled. In VB .NET kan de timer interval waarde geen 0 meer zijn, maar moet met enabled worden aangegeven of de timer actief is ja of nee.
OLE Containers
In VB .Net bestaan geen ole container controlls meer, je kan wel een WebBrowser control gebruiken om als OLE container dienst te doen.
Image boxen en Pictureboxen
De .NET Picturebox control vervangt het VB6 Picturebox en image control. De picturebox ondersteunt ook geanimeerde gif afbeeldingen. Image controls bestaan dus niet meer.
Line en Shape controls
De line en shape controls bestaan niet meer, de GDI+ class in System.Drawing vervangt deze in .NET. Je moet hier de draw methode van System.Drawing voor gebruiken.
Clipboard
Je kan met .NET veel meer met het clipboard doen dan in VB6 het geval was, alleen de propertys van het clipboard statement zijn veranderd, dus zijn niet meer compatible met VB6.
DDE ( Dynamic Data Exchange )
Sommige controls hadden DDE support ( om direct data uit een database te tonen etc ), deze functionaliteit is in .NET verdwenen.
ADO, RDO en DAO code
De ADO, RDO en DAO objecten die in VB6 gebruikt konden worden om naar databases te verbinden zijn vervangen door ADO.NET, deze bied extra functionaliteit om disconnected met data te kunnen werken. Ook XML support is hier volledig geïntegreerd. ADO, RDO en DAO functionaliteit KAN echter in .NET nog wel gewoon worden gebruikt.
Msgbox
Msgbox bestaat nog wel, maar Messagebox.show is de nieuwe fancy manier om een message te tonen. Voorbeeld:
MessageBox.Show("Hello World!", "My First App")
Property declaratie
Property declaratie is goed veranderd, je hebt geen let, get en set meer voor een property, maar de property wordt nu als volgt gedeclareerd, voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
| Public property MachinePart() as string
Set
MstrName = value
End set
Get
MachinePart = mstrName
End get
End Property |
Dus eigenlijk wordt de get en de set in de property zelf afgehandeld.
Error handling
Error handling is even ietsje anders, we gebruiken nu de Try, Catch en Finally structuur. Dit werkt als volgt:
code:
1
2
3
4
5
6
| Try
Afgevangen programmablok
Catch
Wordt uitgevoerd als er een fout optreed
Finally
Wordt altijd uitgevoerd. |
Geen .show meer
Er is geen simpele form.show methode meer. Alles is in VB.Net een object geworden, dus je moet echt Dim formnaam as new formnaam doen en dan een formnaam.show geven wil je dit nog bereiken.
Return keyword
Een functie geef je in VB6 zijn return waarde door functienaam = waarde op te geven. In .NET gebruik je hier het return keyword voor, dus return waarde. Dit geeft als voordeel dat je de functienaam kan wijzigen zonder dat je dan overal je return waarde statements moet aanpassen.
Backwards compatibility
Als je echt iets mist uit VB6, kan je de namespace Microsoft.VisualBasic.Compatibility.VB6 gebruiken, deze bevat bijna alle oude VB6 functionaliteit, maar het is natuurlijk beter als je omschakelt naar de nieuwe functies.