Il presente articolo è stato tradotto automaticamente.
Esigenze primarie
Insieme e inizializzatori di matrice in Visual Basic 2010
Adrian Spotty Bowles
Alcune delle modifiche che hanno avuto luogo durante il ciclo di prodotto Microsoft Visual Studio (VS) 2010 lingua è state finalizzate alla semplificazione delle operazioni che erano precedentemente possibili solo tramite l'utilizzo di molto codice standard. Questo approccio in Visual Studio 2010 consente di migliorare l'esperienza di codifica, che si effettua la produttività. Uno delle funzionalità di nuova in Visual Studio per la versione 2010 è inizializzatori di insieme. Questa funzionalità era disponibile in C# in 2008 e come parte la filosofia generale parità è stato adozione di Microsoft. Alcune delle modifiche apportate a Visual Basic 2010 potrebbero essere meno evidente e in questo articolo verrà identificare alcuni dei dettagli di implementazione meno ovvi.
Insiemi e matrici sono costrutti molto comune in qualsiasi applicazione moderna e questi insiemi devono spesso essere inizializzati. Prima per le versioni 2010, Visual Basic è stato possibile gestire gli inizializzatori di matrice di base con alcune limitazioni, ma gli insiemi non stato possibile effettuare l'inizializzazione in un'istruzione di una riga simile, che spesso ha codice standard, simile a quello riportato di seguito:
Dim x As New List(Of String)
x.Add("Item1")
x.Add("Item2")
In alternativa, era necessaria la creazione di un costruttore per la classe, utilizzo simile al seguente:
Dim x as new list(of string)({"Item1","Item2"})
Nessuno di questi approcci sono stati particolarmente elegante soluzioni.
Mentre entrambe utilizzato, sono coinvolti scrivere codice aggiuntivo per inizializzare l'insieme. Anche se questo codice è spesso codice standard semplice, è possibile bloat il codice di origine, che può comportare costi di manutenzione associati.
Se si osserva attraverso qualsiasi codice che utilizza insiemi, verrà visualizzato codice standard simili. Nell'esempio precedente, si siano aggiungendo solo due elementi di stringa e si utilizzano ripetitive chiamate al metodo add per tutte le stringhe di. Se è stato utilizzato un personalizzato "definito dall'utente"insieme o un insieme di "definito dall'utente"tipi, aumenterebbe il codice standard per eseguire la stessa attività di inizializzazione dell'insieme.
Nuova sintassi
Con Visual Studio. 2010, ci sono ora in grado di gestire l'attività di inizializzazione insieme in un modulo molto più breve, riduzione verso il basso di più righe di codice e chiamate di metodo Aggiungi ripetute in una singola istruzione:
Dim x As New List(Of String) From {"Item1", "Item2"}
Questo è un esempio di semplice utilizzo di tipi di insieme del framework elenco generico per fornire un insieme indipendente dai tipi. Questi tipi di insieme sono più comunemente utilizzati più tipi di insieme handcrafted, che sono stati utilizzati in passato per l'implementazione di insiemi type-safe.
Consente la sintassi dei membri insieme a essere specificato come un elenco di elementi contenuti all'interno di parentesi graffe {}, e ogni elemento è separato da virgole utilizzando "FROM"parola chiave per determinare il list.The membro iniziale precedente esempio funziona correttamente per un tipo di elenco, ma per tipi di insieme più complessi, ad esempio i dizionari, in cui è possibile una coppia chiave / valore fornito per ogni membro, è necessario un ulteriore insieme di parentesi graffe intorno a ogni coppia chiave / valore, come illustrato di seguito:
Dim x As New Dictionary(Of Integer, String)
From {{1, "Item1"}, {2, "Item2"}}
La sintassi è corretta e coerente. Ogni coppia chiave / valore dipende da {del} nidificati e questi argomenti vengono utilizzati quando viene effettuata una chiamata al metodo Add (dizionario) del tipo di insieme. In modo che le righe precedenti sarebbero compensare per:
Dim x As New Dictionary(Of Integer, String)
x.Add(1, "Item1")
x.Add(2, "Item2")
Implementazione e dell'utilizzo in altri tipi di insieme
Negli esempi precedenti viene illustrato come insiemi inizializzare utilizzo per tipi di framework tipica. Tuttavia, si potrebbe hanno implementato i propri tipi di insieme o potrebbe utilizzare alcuni tipi di cui non si è immediatamente in grado di utilizzare l'inizializzatore in quanto dispongono di un metodo Add (esempi includono elenco coda).
Per consentire di utilizzare la funzionalità di inizializzatore di insieme di entrambi questi scenari, è importante comprendere un po' su che cosa accade dietro le quinte e come questa funzionalità è implementata. Questa comprensione consentiranno quindi espandere l'utilizzo oltre le semplici esempi di elenco e il dizionario.
Per utilizzare la sintassi di inizializzatore di insieme, è necessario che due elementi da true. Il tipo deve:
- Implementano il modello di IEnumerable, che può essere l'interfaccia IEnumerable o semplicemente presentano un metodo GetEnumerator. Questo può essere definito come "duck"digitare: Se è simile a un duck e quacks come un'anatra, probabilmente è un duck.
In questo caso, se contiene un metodo GetEnumerator con una firma appropriata, quindi viene probabilmente implementata un comportamento simile per l'interfaccia IEnumerable. Questo comportamento digitando a duck è già utilizzato per consentire i tipi da utilizzare con per ciascun costrutto. - Contenere almeno un metodo Add accessibile con un parametro. Può trattarsi di un'istanza o un metodo di estensione.
Se la classe di insieme soddisfa entrambe queste condizioni, è possibile utilizzare la sintassi di inizializzatore di insieme.
Per inizializzatori di insieme, non si è effettivamente utilizzato il metodo IEnumerable per l'inizializzazione dell'insieme, ma è utilizzarlo come suggerimento per determinare che questo tipo è, infatti, un tipo di insieme. Se implementa IEnumerable o il modello di IEnumerable, è un'alta probabilità di avere un insieme, anche se non è garantito.
Il metodo Add viene chiamato per ogni elemento nell'elenco inizializzatore per aggiungere elementi all'insieme. Il fatto che sia presente un metodo Add non significa necessariamente che deve implementare la funzionalità di aggiungere elementi all'insieme. Ma trasposto di chiamate a un metodo Add con gli argomenti "elenco di inizializzazione"verrà effettuato.
Per illustrare questo punto, nell'esempio di codice riportato in di figura 1 è valido e consente la sintassi di inizializzatore di insieme, ma in realtà non aggiunta elementi a un insieme.
Altre classi del Framework, utilizzare con i metodi di estensione
Alcuni tipi di insieme del framework di non soddisfare entrambi questi requisiti. Le code e stack di implementano metodi quali POP e comando anziché Aggiungi. Per consentire di utilizzare la concisa funzionalità di inizializzatore di insieme per questi tipi, è possibile sfruttare la potenza di metodi di estensione. È semplice creare un metodo Aggiungi estensione per questi tipi, che quindi verrà consente di inizializzare i metodi con sintassi semplice.
Imports System.Runtime.CompilerServices
Module Module1
Sub Main()
Dim st1 As New Stack(Of Integer) From {1, 2, 3}
End Sub
End Module
Module Extensions
<Extension()> Sub Add(Of t)(ByVal x As Stack(Of t), ByVal y As t)
x.Push(y)
End Sub
End Module
Quando si utilizzano i metodi di estensione, è consigliabile in genere per estendere solo i tipi che è necessario controllare. Utilizzo libero di metodi di estensione può causare il conflitti o le modifiche di funzionamento se i tipi vengono aggiornati, quindi utilizzarli con cautela,
Utilizzare con la continuazione di riga implicito
Visual Studio 2010 contiene anche un'altra funzionalità molto-sollecitata: continuazione di riga. Questa funzionalità consente di eliminare i caratteri _ noiosi. Continuazione di riga implicita è consentita per gli elementi di "Initialize List", pertanto è possibile inserire ognuno di questi elementi in propria righe per ragioni di chiarezza.
Dim st1 As New Stack(Of Integer) From {1,
2,
3}
Sintassi di inizializzatore di insieme nella figura 1
Module Module1
Sub Main()
Dim NC As New TestNonCollectionClass From {1, 2, 3}
End Sub
End Module
Class TestNonCollectionClass
Public Function GetEnumerator() As System.Collections.IEnumerator
'Does Nothing
End Function
Public Sub Add(ByVal x As Integer)
If x = 1 Then
Console.WriteLine("Add Item" & x.ToString)
End If
End Sub
End Class
Questo consente di produrre codice di pulito è semplice da leggere, non contenga caratteri supplementari _ ed evita la ripetizione. È possibile utilizzarlo per le proprie raccolte e quelli già nel framework. Il supporto di IntelliSense dell'editor consente di "FROM"supporto per tutti i tipi che seguono le regole precedenti due, ovvero che funzionerà per i tipi di insieme. Se si dispone di codice esistente che utilizza il carattere _ e si preferisce mantenere coerente con la sintassi precedente, questa scelta è ancora supportata.
Comportamento di gestione delle eccezioni
Esistono alcuni interessanti aspetti da sottolineare durante la chiamata del metodo Add per ogni "elenco di inizializzatore"membri.
Ad esempio, quando una chiamata al metodo Add con l'argomento fornito dai risultati elenco inizializzare un'eccezione, l'elenco non verrà inizializzata con i membri. Ciò significa in realtà è che l'insieme viene inizializzato con tutti i membri o non inizializzato affatto.
Ciò significa che se l'elenco contiene tre elementi e il terzo quando viene chiamato utilizzando i risultati del metodo Aggiungi un'eccezione, si ottiene un'eccezione e un insieme non inizializzato. Il followingexample intenzionalmente genera un'eccezione per illustrare questo scenario esatto e genera "Vuoto"viene scritto nella console. Tuttavia, modificando l'elenco di inizializzatore per rimuovere il valore tre risultante "Initialized: elemento numero 2"come illustrato in di figura 2.
Nella figura 2 modifica l'elenco di inizializzatore
Imports System.Runtime.CompilerServices
Module Module1
Sub Main()
Dim l1 As Stack(Of Integer)
Try
l1 = New Stack(Of Integer) From {1, 2}
Catch ex As Exception
End Try
If l1 Is Nothing Then
Console.WriteLine("Blank")
Else
Console.WriteLine("Initialized - Element Count:" & l1.Count)
End If
End Sub
End Module
Module Extensions
<Extension()> Sub Add(Of t)(ByVal x As Stack(Of t), ByVal y As t)
If y.ToString = "3" Then
Throw New Exception("Intentional Exception")
Else
x.Push(y)
End If
End Sub
End Module
Se questa situazione non verificarsi, quindi sarebbe necessario creare codice aggiuntivo per determinare se si è verificato senza eccezioni di inizializzazione e lo stato dell'insieme di.
Utilizzo di metodi di estensione per abbreviare la sintassi
La sintassi standard per l'inizializzazione di un insieme di risultati di oggetti complessi in dover ripetere "Nuovo tipo di < >"per ogni degli elementi dell'elenco di inizializzatore.
Module Module1
Sub Main()
Dim CustomerList As New List(Of Customer)
From {New Customer With {.Name = "Spotty", .Age = 39},
New Customer With {.Name = "Karen", .Age = 37}}
End Sub
End Module
Class Customer
Public Property Name As String = ""
Public Property Age As Integer = 0
End Class
La sintassi richiede che ogni elemento nell'elenco inizializzatore viene creata un'istanza. Mediante l'utilizzo di metodi di estensione, è possibile abbreviare questa sintassi ancora ulteriormente. La funzionalità si basa sul fatto che il tipo di insieme supporta l'interfaccia IEnumerable e dispone inoltre di un metodo di componente, che gli elementi di elenco inizializzatore racchiusi da associare ai parametri di metodo di componente, come illustrato nella di figura 3.
Utilizzo di nella figura 3 di metodi di estensione
Imports System.Runtime.CompilerServices
Module Module1
Sub Main()
'Shortend Syntax through the use of extension methods
Dim CustomerList As New List(Of Customer)
From {{"Spotty", 39}, {"Karen", 37}}
End Sub
End Module
Module Extension
<Extension()> Public Sub add(ByVal x As List(Of Customer), _
ByVal Name As String, ByVal Age As Integer)
x.add(New Customer With {.Name = Name, .Age = Age})
End Sub
End Module
Class Customer
Public Property Name As String = ""
Public Property Age As Integer = 0
End Class
Aggiungere il metodo di overload
La condizione di metodo Add è fondamentale per questa funzionalità e può essere sottoposti a overload. Ogni metodo chiamerà il proprio overload in base agli argomenti di chiamata. Non esiste nessuna chiave qui e risoluzione dell'overload di metodo Aggiungi funziona esattamente come funziona di risoluzione per qualsiasi metodo di overload.
Questo nuovo è migliore illustrato da un semplice esempio. In di figura 4, abbiamo overload per diversi tipi di dati, si chiamerà quello appropriato per l'argomento di chiamata.
Perché consente l'utilizzo di sintassi 'FROM' e non '='?
Una domanda frequente il team del prodotto richiesta per questa funzionalità è l'utilizzo di "FROM"parola chiave, poiché gli inizializzatori di matrice siano già utilizzando il "="per l'assegnazione.
In Visual Basic, è possibile creare istanze di una classe di insiemi in tre modi diversi:
Dim x1 As New List(Of Integer)
Dim x2 = New List(Of Integer)
Dim x3 As List(Of Integer) = New List(Of Integer)
Aggiungere a questa il fatto che tra la sintassi per creare un'istanza già un insieme sono inclusi un carattere nella sintassi =. Utilizzo di un ulteriore = carattere produrrebbe confusione nella sintassi tra che di assegnazione di una nuova istanza del tipo di insieme e inizializzazione di membri all'insieme.
Utilizzare una parola chiave anziché un carattere = per determinare il risultato di un'azione Collection initializer consente di evitare questo problema e consente di tutte le convenzioni di sintassi esistenti dichiarare e inizializzare i tipi di insieme. Il modo per determinare l'elenco di inizializzatore rimane ancora familiare per la sintassi di inizializzatore di matrice esistente.
La parola chiave FROM è stato scelto dopo molto discussione. Per tali familiare con le query LINQ, potrebbe sembrare una scelta strano perché è già una parola chiave FROM utilizzata in LINQ. Può sembrare che questa scelta potrebbe causare potenziale ambiguità quando si utilizza le query LINQ ma come vedremo, questo non è il caso.
Non 'FROM'Può in conflitto con 'FROM'nelle query?
Anche in query che contengono l'insieme inizializzatori, non è disponibile alcuna ambiguità della parola chiave. Questo può essere illustrato nel seguente codice:
Module Module1
Sub Main()
'The first from is the query,
'the second is the collection initializer.
'The parser can always successfully identify the difference
Dim x = From i In New List(Of Integer) From {1, 2, 3, 4}
Where i <= 3
Select i
For Each i In x
Console.WriteLine(i)
Next
Stop
End Sub
End Module
Limiti utilizzo insieme Initalizer con inizializzatore di oggetto
Per il prodotto del 2008, il team di Visual Basic implementato gli inizializzatori di oggetto attivato allo sviluppatore di inizializzazione oggetto campi/proprietà sono stati creare istanze di un'istanza di un oggetto:
Dim x As New List(Of Integer) With {.Capacity = 10}
Tuttavia, non è possibile inizializzare sia l'oggetto che l'insieme nella stessa dichiarazione, in modo di seguito provocherà un errore di sintassi:
Dim x as New List(Of Integer) from {1,2,3} With {.Capacity = 10}
Vi sono alcuni altri cambiamenti meno ovvi verificatisi in relativi 2010 a matrici che potrebbero non essere immediatamente evidente, ma potrebbero avere impatto sul codice di utilizzo di matrici.
Figura 4 Overloads per tipi di dati diversi
Imports System.Runtime.CompilerServices
Module Module1
Sub Main()
Dim l1 As New Stack(Of Integer) From {1, 2.2, "3"}
Console.WriteLine("Element Count:" & l1.Count)
Stop
End Sub
End Module
Module Extensions
<Extension()> Sub Add(ByVal X1 As Stack(Of Integer), _
ByVal x2 As Integer)
Console.WriteLine("Integer Add")
X1.Push(x2)
End Sub
<Extension()> Sub Add(ByVal X1 As Stack(Of Integer), _
ByVal x2 As Double)
Console.WriteLine("Double Add")
X1.Push(CInt(x2))
End Sub
<Extension()> Sub Add(ByVal X1 As Stack(Of Integer), _
ByVal x2 As String)
Console.WriteLine("String Add")
X1.Push(CInt(x2))
End Sub
End Module
Modifiche di inizializzatore di matrice
Sebbene prima la versione 2010 fosse possibile inizializzare matrici semplice, non vi sono comunque alcune limitazioni. Una delle modifiche recenti consente di tipi matrice inizializzazione e dedotto in modo più conciso.
In precedenza, per identificare un elemento in Visual Basic come matrice necessario specificare un insieme di parentesi dell'identificatore:
Dim a() As Integer = {1, 2, 3}
Ora le parentesi non sono necessarie e il tipo verrà inferito come un tipo matrice con Option Infer On, in una sintassi più concisa:
Dim a = {1, 2, 3}
Inferenza del tipo di matrice
In 2008, è stata implementata la funzionalità dell'inferenza del tipo abilitati essere dedotto da valori di assegnazione dei tipi di dati. Ciò funzionava per singoli oggetti dichiarati all'interno di corpi di metodo, ma non è stato dedurre un tipo di matrici e pertanto sono sempre matrici di oggetti.
Sub Main()
Dim a() = {1, 2, 3}
'Type would previously result in Object Array prior to 2010
End Sub
È stato migliorato e ora tipi di matrice vengono dedotti, come illustrato di seguito:
Sub Main()
Dim a = {1, 2, 3} 'Type now infers Integer Array
End Sub
Il tipo dedotto della matrice è determinato dalla funzionalità di tipo dominante aggiunto nel 2008. L'inferenza del tipo è ancora valida solo per codice dichiarato all'interno di corpi di metodo, in modo che i campi siano ancora matrici di oggetti a meno che non tipizzata in modo specifico.
È possibile inizializzare più dimensioni di matrice, ma tutte le coppie nidificate devono contenere lo stesso numero di membri. Funzioneranno quindi della dimensione di due esempi.
Due esempi che seguono verranno creati una matrice bidimensionale di integer:
Dim TwoDimension1(,) = {{1, 2}, {3, 4}}
Dim TwoDimension2 = {{1, 2}, {3, 4}}
La sintassi è molto simile al codice precedente per le matrici unidimensionali, e tutto il codice esistente si continueranno a funzionare con alcune eccezioni.
Dim a() = {1, 2, 3}
Nell'istruzione precedente, il tipo di matrice verrà inferito dall'elenco di inizializzatori. Verrà creato in una matrice integer viene inferita. In passato, questi semplicemente avrebbe dovuto essere matrici di oggetti come abbiamo non dispone di inferire qualsiasi tipo matrice dall'elenco inizializzatore. Se si utilizza il codice che controlla il tipo, utilizza la reflection o se contiene più overload inclusi tipi di matrice oggetto, questo potrebbe produrre ora risultati diversi. Questo potrebbe esempi di metodi ad associazione tardiva.
Matrici multidimensionali
Per poter inizializzare una matrice multidimensionale, le dimensioni devono corrispondere il conteggio degli elementi nell'elenco inizializzatore. Se questi non sono lo stesso e tutti gli elementi nidificati l'elenco di inizializzazione non sono necessario un numero di articolo coerente, quindi si verificherà un errore di sintassi:
Dim TwoDimension2 = {{1, 2}, {3, 4}}
'Valid 2 dimension integer(,) array inferred
Dim TwoDimension2Invalid(,) = {{1}, {3}}
'Invalid – dimension and element count mismatch
Dim TwoDimension2Invalid1(,) = {{1, 2}, {3}}
'Invalid:element count not consistent in Initializer List
Ciò significa che utilizzando la sintassi simile come prima, è possibile inizializzare standard corretti matrici unidimensionali.
Inizializzazione di matrice irregolare
Tuttavia, ciò significa che per una matrice irregolare (una matrice di matrici), questa sintassi non lavorare come. Per consentire gli inizializzatori di matrice irregolare, è necessario che ogni gli elenchi di membro è racchiudere in parentesi:
Sub Main()
'Incorrect Jagged Array syntax
Dim JaggedDimensionIncorrect()() = {{1,2},{3,4,5}}
'Correct Jagged Array syntax
Dim JaggedDimension1()() = {({1,2}),({3,4,5})}
End Sub
Nell'esempio precedente otterrà il seguente:
- JaggedDimension1(0) contenente la matrice di integer con elementi 1,2
- JaggedDimension1(1) contenente la matrice di integer con elementi 3,4,5
L'inferenza di matrice funziona per i tipi di matrice nidificato. Di seguito è un esempio leggermente più complesso:
Dim JaggedDimension1() = {({1, 2}), ({3.1, 4.2, 5.3})}
Il risultato sarà di JaggedDimension1 viene inferito come Object() e i membri è di tipo integer() e Double().
Inferenza di matrice e il comportamento previsto
Pertanto è verificare nell'elenco inizializzatore come matrice derivata. Non! L'elenco di inizializzatore non è un tipo concreto come si potrebbe pensare.è una rappresentazione sintattica di un elenco di membri, che diventa un tipo specifico a seconda del contesto che viene utilizzato.
Nell'esempio di codice seguente viene illustrato l'utilizzo che è possibile utilizzare la {,} sintassi per:
1. Dedurre e inizializzare una matrice di integer:
Dim a = {1, 2, 3} 'Infers Integer Array
Questo funziona come non è specificato Nessun tipo di destinazione e deduce il tipo in base al tipo dominante dei membri dell'elenco di inizializzatore.
2. Consente di inizializzare una matrice di tipo diverso:
Dim b As Single() = {1, 2, 3}
'Will convert each integer value into single
Questo funzionerà come abbiamo inizializzerà una singola matrice con i valori di uno, due e tre. L'elenco di inizializzatore non presenta tipo intrinseco di per sé.
Ma le seguenti operazioni è previsto un errore:
Dim a = {1, 2, 3} 'Infers Integer()
Dim c As Single() =
a 'No conversion between Single() and Integer()
Ciò potrebbe sembrare un po' strano variabile ma un viene inferito come matrice di valori integer e inizializzato con i valori di uno, due e tre. Variabile c è dichiarato come una singola matrice. Tuttavia, non vi è alcuna conversione tra una matrice singola e una matrice di integer, che provoca l'errore di sintassi.
Utilizzo inizializzatore di matrice autonomo
La matrice inizializzatore elenco inoltre possibile utilizzare in un contesto autonomo, nel qual caso, avrà non è un tipo di destinazione specificata e funziona come una matrice del tipo principale dei membri dell'elenco di inizializzazione.
In questo modo alcuni interessanti scenari non è disponibile in precedenza. Un esempio potrebbe essere un metodo che accetta una matrice di elementi che si desidera utilizzare per inizializzare una struttura di dati. In cui viene chiamato il metodo determina valori predefiniti diversi, vengono utilizzati come argomenti di chiamata, come illustrato in di figura 5.
In questo caso, è creare una matrice locale per ogni chiamata, semplicemente a passare al metodo un tipo matrice. Con la nuova funzionalità di utilizzo autonomo, è possibile evitare di dover creare variabili locali non necessari per questo tipo di scenario ed è sufficiente utilizzare autonomo inizializzatore elenco per passare i tipi di matrice.
Nell'elenco di inizializzatore dello scenario di utilizzo autonomo consente di agganciare a un tipo derivato di matrice. Così in uno scenario utilizzo autonomo, l'elenco di inizializzazione può essere considerato come una matrice letterale. In questo modo dichiarare gli elementi che prevede solo da utilizzare in istanze limitati, ad esempio chiamate al metodo singoli non è necessario.
Nella figura 5 diversi valori predefiniti utilizzati come argomenti di chiamata
Module Module1
Sub InitializeMethod(ByVal x As String())
'....
End Sub
Sub Main()
Dim i As Integer = 1
Select Case I
Case 1
Dim Array1 As String() = {"Item1", "Item2"}
InitializeMethod(Array1)
Case 2
Dim Array1 As String() = {"Item11", "Item12"}
InitializeMethod(Array1)
End Select
End Sub
End Module
Utilizzo con altre funzionalità 2010
Una delle funzionalità di versione di prodotto 2010 è multitargeting. Sebbene questa funzionalità già esistente nella versione 2008, sono stati apportati alcuni miglioramenti che consentono di numerose funzionalità di linguaggio nella versione di prodotto per essere utilizzati in versioni basata su down 2010 (2.0, 3.0 e 3.5 destinazioni). Di conseguenza, è possibile utilizzare questa funzionalità migliorata per insieme e gli inizializzatori di matrice per le applicazioni esistenti se si utilizza la versione 2010 del prodotto. Ciò consente di semplificare il codice esistente di origine e di sfruttare nuove funzionalità di linguaggio.
Pertanto, quando si utilizza questa nuova funzionalità, è presente potenziale per interrompere il codice esistente? La risposta è Sì, è alcune possibilità di interruzioni di compatibilità, ma questo è limitato a scenari in cui i vantaggi superano la modifica di interruzione originale e le funzionalità esistenti è possibile conservare facilmente:
Dim x1() = {1, 2, 3}
Nelle versioni precedenti, avrebbe comportato la precedente riga di codice in una matrice Object, ma con Visual Studio. 2010, questo sarà di tipo dedotto al tipo di elementi dominante, in questo caso integer(). Questo sarà il caso, indipendentemente dal se ci si rivolge 4.0 o di destinazione down a una versione precedente. Se si dispone di codice che è previsto un tipo specifico di matrice Object, questo codice potrebbe esito negativo. È possibile correggere facilmente specificando in modo esplicito il tipo di destinazione:
Dim x1() As Object = {1, 2, 3}
L'eccezione a questo comportamento si verifica se non contiene alcun tipo dominante per gli elementi:
Dim x1() = {1, 2.2, "test"}
Questo manterranno il comportamento precedente, in corso di una matrice di oggetti di x 1.
Semplice applicazione
Inizializzatori di insieme sono un'aggiunta molto alla lingua. Consentono una sintassi più concisa per inizializzare sia framework e tipi di insieme definito dall'utente. Con modifiche minime, la sintassi può essere applicata facilmente al codice esistente.
La funzionalità è ideale per poter utilizzare altre funzionalità di linguaggio quali metodi di estensione, consentendo la riduzione dell'utilizzo della sintassi per i tipi di insieme. Questa riduzione codice standard utilizzato in precedenza rende il codice più piccoli e più facili da gestire.
Il comportamento di inizializzatore di matrice è stato modificato leggermente in implementazione di inferenza del tipo di matrice e funzionalità migliorate, consentendo l'utilizzo di autonomo di matrici e migliori possibilità di inizializzare le matrici multidimensionali e irregolari rispetto alle versioni precedenti.
Quasi ogni applicazione utilizza matrici o insiemi e questa caratteristica la può essere utilizzati in qualsiasi progetto.
Adrian Spotty Bowles ha sviluppato con ogni versione di Visual Basic e ha gestito per individuare il modo per Redmond, WA, dove lavora nel team di prodotto Visual Basic come un tester di tecnico software progettazione attivando il compilatore di Visual Basic. Durante il rilascio di Visual Basic 2008, ha lavorato su numerose funzionalità di linguaggio, inclusi Methods.You di estensione può raggiungere Bowles in di Abowles@microsoft.com.