Ricerca…


introduzione

Visual Basic 14 è la versione di Visual Basic fornita come parte di Visual Studio 2015.

Questa versione è stata riscritta da zero in circa 1,3 milioni di righe di VB. Sono state aggiunte molte funzionalità per rimuovere le irritazioni comuni e per rendere più comuni i modelli di codifica comuni.

Il numero di versione di Visual Basic passava direttamente da 12 a 14, saltando 13. Ciò è stato fatto per mantenere VB in linea con la numerazione della versione di Visual Studio stesso.

Operatore condizionale nullo

Per evitare il controllo null dettagliato, il ?. operatore è stato introdotto nella lingua.

La vecchia sintassi verbosa:

If myObject IsNot Nothing AndAlso myObject.Value >= 10 Then

Può essere ora sostituito dal conciso:

If myObject?.Value >= 10 Then

Il ? l'operatore è particolarmente potente quando si ha una catena di proprietà. Considera quanto segue:

Dim fooInstance As Foo = Nothing
Dim s As String

Normalmente dovresti scrivere qualcosa come questo:

If fooInstance IsNot Nothing AndAlso fooInstance.BarInstance IsNot Nothing Then
    s = fooInstance.BarInstance.Baz
Else
    s = Nothing
End If

Ma con il ? l'operatore può essere sostituito solo con:

s = fooInstance?.BarInstance?.Baz

Nome dell'operatore

L'operatore NameOf risolve spazio dei nomi, tipi, variabili e nomi dei membri in fase di compilazione e li sostituisce con l'equivalente della stringa.

Uno dei casi d'uso:

Sub MySub(variable As String)
    If variable Is Nothing Then Throw New ArgumentNullException("variable")
End Sub

La vecchia sintassi espone il rischio di rinominare la variabile e lasciare la stringa hardcoded al valore errato.

Sub MySub(variable As String)
    If variable Is Nothing Then Throw New ArgumentNullException(NameOf(variable))
End Sub

Con NameOf , la sola rinomina della variabile solleverà un errore del compilatore. Ciò consentirà inoltre allo strumento di ridenominazione di rinominare entrambi con un solo sforzo.

L'operatore NameOf utilizza solo l'ultimo componente del riferimento tra parentesi. Questo è importante quando si gestisce qualcosa come namespace nell'operatore NameOf .

Imports System

Module Module1
    Sub WriteIO()
        Console.WriteLine(NameOf(IO)) 'displays "IO"
        Console.WriteLine(NameOf(System.IO)) 'displays "IO"
    End Sub
End Module

L'operatore usa anche il nome del riferimento che viene digitato senza risolvere alcun cambiamento di nome nelle importazioni. Per esempio:

Imports OldList = System.Collections.ArrayList

Module Module1
    Sub WriteList()
        Console.WriteLine(NameOf(OldList)) 'displays "OldList"
        Console.WriteLine(NameOf(System.Collections.ArrayList)) 'displays "ArrayList"
    End Sub
End Module

Interpolazione a stringa

Questa nuova funzione rende più leggibile la concatenazione di stringhe. Questa sintassi verrà compilata alla sua chiamata String.Format equivalente.

Senza interpolazione delle stringhe:

String.Format("Hello, {0}", name)

Con interpolazione delle stringhe:

$"Hello, {name}"

Le due righe sono equivalenti e vengono entrambi compilati in una chiamata a String.Format .

Come in String.Format , le parentesi possono contenere qualsiasi singola espressione (chiamata a un metodo, proprietà, un operatore coalescente null eccetera).

String Interpolation è il metodo preferito su String.Format perché impedisce che si verifichino alcuni errori di runtime. Si consideri la seguente riga String.Format :

String.Format("The number of people is {0}/{1}", numPeople)

Questo verrà compilato, ma causerà un errore di runtime in quanto il compilatore non controlla che il numero di argomenti corrisponda ai segnaposto.

Auto-Proprietà di sola lettura

Le proprietà di sola lettura erano sempre possibili in VB.NET in questo formato:

Public Class Foo

  Private _MyProperty As String = "Bar"

  Public ReadOnly Property MyProperty As String
    Get
      Return _MyProperty
    End Get
  End Property

End Class

La nuova versione di Visual Basic consente una breve mano per la dichiarazione delle proprietà in questo modo:

Public Class Foo

  Public ReadOnly Property MyProperty As String = "Bar"

End Class

L'effettiva implementazione generata dal compilatore è esattamente la stessa per entrambi gli esempi. Il nuovo metodo per scriverlo è solo una mano breve. Il compilatore genererà comunque un campo privato con il formato: _<PropertyName> per supportare la proprietà di sola lettura.

Moduli e interfacce parziali

Simile alle classi parziali, la nuova versione di Visual Basic ora è in grado di gestire moduli parziali e interfacce parziali. La sintassi e il comportamento sono esattamente gli stessi di quelli per le classi parziali.

Un esempio di modulo parziale:

Partial Module Module1
  Sub Main()
    Console.Write("Ping -> ")
    TestFunktion()
  End Sub
End Module

Partial Module Module1
  Private Sub TestFunktion()
    Console.WriteLine("Pong")
  End Sub
End Module

E un'interfaccia parziale:

Partial Interface Interface1
  Sub Methode1()
End Interface

Partial Interface Interface1
  Sub Methode2()
End Interface

Public Class Class1
  Implements Interface1
  Public Sub Methode1() Implements Interface1.Methode1
    Throw New NotImplementedException()
  End Sub

  Public Sub Methode2() Implements Interface1.Methode2
    Throw New NotImplementedException()
  End Sub
End Class

Proprio come per le classi parziali, le definizioni per i moduli e le interfacce parziali devono trovarsi nello stesso spazio dei nomi e nello stesso assembly. Questo perché le parti parziali dei moduli e delle interfacce vengono unite durante la compilazione e l'assembly compilato non contiene alcuna indicazione che la definizione originale del modulo o dell'interfaccia sia stata divisa.

Letterali stringa multilinea

VB ora consente di ottenere stringhe letterali suddivise su più righe.

Vecchia sintassi:

Dim text As String = "Line1" & Environment.NewLine & "Line2"

Nuova sintassi:

Dim text As String = "Line 1
Line 2"

#Region miglioramenti alla direttiva

La direttiva #Region può ora essere collocata all'interno di metodi e può estendersi su metodi, classi e moduli.

#Region "A Region Spanning A Class and Ending Inside Of A Method In A Module"
   Public Class FakeClass
    'Nothing to see here, just a fake class.
   End Class

   Module Extensions

    ''' <summary>
    ''' Checks the path of files or directories and returns [TRUE] if it exists.
    ''' </summary>
    ''' <param name="Path">[Sting] Path of file or directory to check.</param>
    ''' <returns>[Boolean]</returns>
    <Extension>
    Public Function PathExists(ByVal Path As String) As Boolean
        If My.Computer.FileSystem.FileExists(Path) Then Return True
        If My.Computer.FileSystem.DirectoryExists(Path) Then Return True
        Return False
    End Function

    ''' <summary>
    ''' Returns the version number from the specified assembly using the assembly's strong name.
    ''' </summary>
    ''' <param name="Assy">[Assembly] Assembly to get the version info from.</param>
    ''' <returns>[String]</returns>
    <Extension>
    Friend Function GetVersionFromAssembly(ByVal Assy As Assembly) As String
#End Region
        Return Split(Split(Assy.FullName, ",")(1), "=")(1)
    End Function
End Module

Commenti dopo la continuazione della linea implicita

VB 14.0 introduce la possibilità di aggiungere commenti dopo la continuazione della linea implicita.

Dim number =
    From c As Char 'Comment
    In "dj58kwd92n4" 'Comment
    Where Char.IsNumber(c) 'Comment
    Select c 'Comment

La gestione delle eccezioni

Durante la codifica, gli errori imprevisti si verificano abbastanza frequentemente, il che richiede il debug e il test. Ma a volte gli errori sono effettivamente previsti e per aggirarlo, c'è il blocco Try..Catch..Throw..Finally..End Try .

Per gestire correttamente un errore, il codice viene inserito in un blocco Try..Catch , in cui il Catch , come afferma il nome, catturerà tutte le eccezioni che si presentano in questo blocco.

E in caso di eccezione, abbiamo la possibilità di Throw l'errore, cioè restituirlo per avvisare l'utente o gestirlo internamente nel codice stesso.

La Finally parte è il codice finale che, qualunque sia il risultato sia, se v'è o meno un'eccezione, il codice verrà eseguito prima di uscire del blocco.

Nel caso in cui sia necessario uscire dall'orologio, è possibile utilizzare l'istruzione Exit Try . Ma anche qui, il codice nella sezione Finally verrà eseguito prima di terminare.

La sintassi è semplice;

Try
    [ tryStatements ]
    [ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
    [ catchStatements ]
    [ Exit Try ] ]
[ Catch ... ]
[ Finally
    [ finallyStatements ] ]
End Try

dove solo la Try e End Try è obbligatoria. Il resto può essere ignorato, ma come una buona pratica, non comprendono la Finally parte, anche se sarebbe essere lasciato vuoto.

Venendo all'eccezione, ci sono diversi tipi di eccezioni che possono essere scoperti. Sono disponibili eccezioni pronte disponibili da .Net Framework, come di seguito;

Classe di eccezione Breve descrizione
System.IO.IOException Gestisce gli errori di I / O
System.IndexOutOfRangeException Si riferisce a un indice di array fuori intervallo
System.ArrayTypeMismatchException Quando il tipo non corrisponde al tipo di array
System.NullReferenceException Gestisce gli errori generati dal riferimento a un oggetto nullo.
System.DivideByZeroException Gestisce gli errori generati dalla divisione di un dividendo con zero.
System.InvalidCastException Gestisce gli errori generati durante la tipizzazione.
System.OutOfMemoryException Gestisce gli errori generati da una memoria insufficiente.
System.StackOverflowException Gestisce gli errori generati dallo stack overflow.
--------------------------- ------------------------


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow