Recherche…


Introduction

Visual Basic 14 est la version de Visual Basic fournie avec Visual Studio 2015.

Cette version a été réécrite à partir de zéro dans environ 1,3 million de lignes de VB. De nombreuses fonctionnalités ont été ajoutées pour supprimer les irritations les plus courantes et rendre les modèles de codage courants plus propres.

Le numéro de version de Visual Basic est passé directement de 12 à 14, en sautant 13. Cela a été fait pour garder VB en ligne avec la numérotation de la version de Visual Studio elle-même.

Opérateur conditionnel nul

Pour éviter la vérification nulle verbeuse, le ?. l'opérateur a été introduit dans la langue.

L'ancienne syntaxe verbeuse:

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

Peut être maintenant remplacé par le concis:

If myObject?.Value >= 10 Then

Le ? l'opérateur est particulièrement puissant lorsque vous avez une chaîne de propriétés. Considérer ce qui suit:

Dim fooInstance As Foo = Nothing
Dim s As String

Normalement, vous devriez écrire quelque chose comme ceci:

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

Mais avec le ? l'opérateur cela peut être remplacé par seulement:

s = fooInstance?.BarInstance?.Baz

Opérateur NameOf

L'opérateur NameOf résout les espaces de noms, les types, les variables et les noms de membres au moment de la compilation et les remplace par l'équivalent de chaîne.

Un des cas d'utilisation:

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

L'ancienne syntaxe exposera le risque de renommer la variable et de laisser la chaîne codée en dur à la mauvaise valeur.

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

Avec NameOf , renommer la variable uniquement provoquera une erreur de compilation. Cela permettra également à l’outil de renommage de renommer les deux en un seul effort.

L'opérateur NameOf n'utilise que le dernier composant de la référence entre crochets. Ceci est important lorsque vous manipulez quelque chose comme des espaces de noms dans l'opérateur 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'opérateur utilise également le nom de la référence saisie sans résoudre aucun changement de nom. Par exemple:

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

Interpolation de chaîne

Cette nouvelle fonctionnalité rend la concaténation de chaîne plus lisible. Cette syntaxe sera compilée à son appel String.Format équivalent.

Sans interpolation de chaîne:

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

Avec interpolation de chaîne:

$"Hello, {name}"

Les deux lignes sont équivalentes et les deux sont compilées en un appel à String.Format .

Comme dans String.Format , les parenthèses peuvent contenir n'importe quelle expression unique (appel à une méthode, propriété, opérateur de coalescence nul et ainsi de suite).

L'interpolation de chaîne est la méthode préférée par rapport à String.Format car elle empêche certaines erreurs d'exécution de se produire. Considérons la ligne String.Format suivante:

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

Cela compilera, mais provoquera une erreur d'exécution car le compilateur ne vérifie pas que le nombre d'arguments correspond aux espaces réservés.

Propriétés automatiques en lecture seule

Les propriétés en lecture seule étaient toujours possibles dans VB.NET dans ce format:

Public Class Foo

  Private _MyProperty As String = "Bar"

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

End Class

La nouvelle version de Visual Basic permet une courte main pour la déclaration de propriété comme suit:

Public Class Foo

  Public ReadOnly Property MyProperty As String = "Bar"

End Class

L'implémentation réelle générée par le compilateur est exactement la même pour les deux exemples. La nouvelle méthode pour l'écrire n'est qu'une main courte. Le compilateur générera toujours un champ privé au format: _<PropertyName> pour sauvegarder la propriété en lecture seule.

Modules partiels et interfaces

Semblable à des classes partielles, la nouvelle version de Visual Basic est désormais capable de gérer des modules partiels et des interfaces partielles. La syntaxe et le comportement sont exactement les mêmes que pour les classes partielles.

Un exemple de module partiel:

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

Et une interface partielle:

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

Tout comme pour les classes partielles, les définitions des modules partiels et des interfaces doivent être situées dans le même espace de noms et le même assemblage. Cela est dû au fait que les parties partielles des modules et des interfaces sont fusionnées pendant la compilation et que l'assembly compilé ne contient aucune indication indiquant que la définition d'origine du module ou de l'interface était fractionnée.

Littéraux multilignes

VB autorise désormais les littéraux de chaîne répartis sur plusieurs lignes.

Ancienne syntaxe:

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

Nouvelle syntaxe:

Dim text As String = "Line 1
Line 2"

Amélioration de la directive #Region

La directive #Region peut maintenant être placée dans des méthodes et peut même couvrir des méthodes, des classes et des modules.

#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

Commentaires après suite de ligne implicite

VB 14.0 introduit la possibilité d'ajouter des commentaires après la continuation implicite des lignes.

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

Gestion des exceptions

Pendant le codage, des erreurs inattendues surviennent assez fréquemment, ce qui nécessite un débogage et des tests. Mais parfois les erreurs sont effectivement attendues et pour le contourner, il y a le bloc Try..Catch..Throw..Finally..End Try .

Pour gérer correctement une erreur, le code est placé dans un bloc Try..Catch , dans lequel le Catch , comme le nom l'indique, intercepte toutes les exceptions qui surviennent dans ce bloc.

Et en cas d'exception, nous avons la possibilité de Throw l'erreur, c'est-à-dire de la renvoyer pour avertir l'utilisateur ou la gérer en interne dans le code lui-même.

La partie Finally est le code final qui, quel que soit le résultat, s'il y a une exception ou non, le code s'exécutera avant de sortir du bloc.

Si vous avez besoin de sortir de l'horloge, vous pouvez utiliser l'instruction Exit Try . Mais ici aussi, le code de la section Finally sera exécuté avant de se terminer.

La syntaxe est simple

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

où seul le Try et End Try est obligatoire. Le reste peut être ignoré mais, en tant que bonne pratique, incluez la partie Finally , même si elle reste vide.

À l’exception, il existe différents types d’exceptions pouvant être interceptées. Ce sont des exceptions prêtes à l'emploi disponibles dans le cadre .Net, comme ci-dessous;

Classe d'exception Brève description
System.IO.IOException Gère les erreurs d'E / S
System.IndexOutOfRangeException Fait référence à un index de tableau hors limites
System.ArrayTypeMismatchException Lorsque le type ne correspond pas au type de tableau
System.NullReferenceException Gère les erreurs générées lors du référencement d'un objet nul.
System.DivideByZeroException Gère les erreurs générées par la division d'un dividende avec zéro.
System.InvalidCastException Gère les erreurs générées lors de la conversion.
System.OutOfMemoryException Gère les erreurs générées par une mémoire libre insuffisante.
System.StackOverflowException Gère les erreurs générées par le débordement de pile.
--------------------------- ------------------------


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow