|
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
In Visual Basic 2008 (9.0) hadden we reeds de optie door middel van local type inference ( onder Option Infer On ) type specifiers ( As clausule ) weg te laten in de declaraties van lokale variabelen, waar een toekennings clausule aan is toegevoegd, om toch strongly type variabelen ( variabelen van een ander type dan Object ) te bekomen : Visual Basic 2010 Broncode Option Infer OnNamespace VisualBasic2008 Module Example1 Sub Main() Dim a = 1 Dim b = "" End Sub End ModuleEnd NamespaceDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Zo wordt variabele a door de compiler beschouwd als een variabele van het type Integer, net alsof we expliciet dit type hadden aangegeven ( Dim a As Integer = 1 ). De compiler kan dit type afleiden van het datatype van de expressie die wordt gebruikt om de initialisatie waarde voor te stellen. Expressie 1 is immers een Integer literal. Variabele b wordt in bovenstaande code beschouwd als een String variabele.
Local type inference was echter in Visual Basic 2008 (9.0) nog niet mogelijk indien men in de toekennings clausule array initializers gebruikt. Voorbeelden van array initializers zijn {1.11, 2.22, 3.33} en {{1, 2, 3}, {4, 5, 6}}. Sterker nog het was helemaal niet mogelijk het datatype van lokale variabelen, die aan de hand van array initializers worden geïnitialiseerd weg te laten : Visual Basic 2010 Broncode Namespace VisualBasic2008 Module Example2 Sub Main() Dim c As Double() = {1.11, 2.22, 3.33} Dim d As Integer(,) = {{1, 2, 3}, {4, 5, 6}} End Sub End ModuleEnd NamespaceDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
In de declaraties van de variabelen c en d zijn de type specifiers As Double() en As Integer(,) hier dus vereist.
Herinner je dat bovenstaande initializers een verkorte notatie zijn voor New Double() {1.11, 2.22, 3.33} en New Integer(,) {{1, 2, 3}, {4, 5, 6}} : Visual Basic 2010 Broncode Namespace VisualBasic2008 Module Example3 Sub Main() Dim c As Double() = New Double() {1.11, 2.22, 3.33} Dim d As Integer(,) = New Integer(,) {{1, 2, 3}, {4, 5, 6}} End Sub End ModuleEnd NamespaceDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Indien de volledige notatie wordt gebruikt kunnen we de As clausules in de declaraties van de variabelen wel weglaten : Visual Basic 2010 Broncode Namespace VisualBasic2008 Module Example4 Sub Main() Dim c = New Double() {1.11, 2.22, 3.33} Dim d = New Integer(,) {{1, 2, 3}, {4, 5, 6}} End Sub End ModuleEnd NamespaceDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
In Visual Basic 10.0 (2010) is het nu mogelijk onder local type inference dergelijke type specifiers weg te laten, zelfs bij de verkorte notatie : Visual Basic 2010 Broncode Option Infer OnNamespace VisualBasic2010 Module Example1 Sub Main() Dim c = {1.11, 2.22, 3.33} Dim d = {{1, 2, 3}, {4, 5, 6}} End Sub End ModuleEnd NamespaceDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Deze array initializers zorgen er in Visual Basic 10.0 (2010) voor dat de variabele c en d strongly type zijn, en dus worden gedeclareerd van de types Double() en Integer(,).
De verkorte array initializers zijn nu volwaardige expressies, zo kunnen ze in Visual Basic 10.0 (2010) overal, waar een expressie wordt verwacht van het type waarnaartoe ze inferred worden, worden gebruikt : Visual Basic 2010 Broncode Namespace VisualBasic2010 Module Example2 Function GetIntegerArray() As Integer() Return {1, 2, 3} End Function End ModuleEnd NamespaceDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Zo kan in het Return statement van de functie die een Integer() oplevert, een array initializer worden gebruikt met elementen van het type Integer.
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|