Vous êtes sur la page 1sur 9

Visual Basic .

NET

Visual Basic .NET est un langage de programmation à la


Visual Basic
syntaxe similaire à celle de Visual Basic 6.
(Visual Studio)
VB.NET permet de développer en .NET via Visual
Studio, sur les systèmes d'exploitation Windows (98,
2000, XP, Vista, 7, 8, 8.1, 10 et 11). Comme tout autre
langage de la plateforme .NET, VB.NET est compilé vers
le langage intermédiaire CIL.

Les IDE (environnements de


développement) Date de
première version
2001

L'IDE commun et incontournable de tous les langages Paradigme Orienté objet, Structuré
.NET est Visual Studio. Celui-ci est payant (la licence est et Impératif
propriétaire) mais dispose d'une version gratuite pour les Auteur Microsoft
développeurs et petites sociétés (CA inférieur à un million Dernière version VB 16.0 (2019)
de dollars) nommée Visual Studio Community. Typage Statique, Fort et
nominatif
Une autre version gratuite existe, limitée à un seul
Dialectes VB7 (VS2003), VB8
langage : Visual Studio Express. (VS2005), VB9
(VS2008), VB10
D'autres IDE gratuits existent, comme SharpDevelop ou (VS2010)
MonoDevelop, mais ceux-ci sont moins évolués que
Influencé par Visual Basic, C#
Visual Studio.
Implémentations .NET Framework, Mono
Licence Roslyn compiler, Apache
Versions License 2.0 2
Site web docs.microsoft.com/en-
us/dotnet/visual-basic (ht
Évolutions : de VB6 à VB7 (non tps://docs.microsoft.com/
exhaustif) en-us/dotnet/visual-basi
c/) et
Qu'est-ce qui différencie VB6 (Visual Basic 6) par rapport docs.microsoft.com/ja-
à VB7 (Visual Studio 2003) ? : jp/dotnet/visual-basic (htt
ps://docs.microsoft.com/j
a-jp/dotnet/visual-basic/)
L'orientation objet fait son apparition avec
notamment l'intégration de la technologie de Extension de
vb
l'héritage, qui jusqu'à ce jour limitait fichier
l'industrialisation du code Visual Basic (VB6
n'était pas un langage orienté objet à proprement parler).
L'intégration de l'environnement de développement (IDE) dans la suite Visual Studio
permettant d'utiliser d'autres langages comme Visual C++ ou Visual C#. Une bibliothèque
de fonction faite en C# sera totalement compatible et
utilisable dans une application VB.NET.
Le code produit par VB.NET est compilé dans un
même langage intermédiaire qu'on appelle le CIL
(Common Intermediate Language) ou MSIL (Microsoft
Intermediate Language). Ce langage est le même que
le résultat d'une compilation de C#.
La connexion aux bases de données est facilitée par
Capture d'écran de MonoDevelop
l'amélioration des outils de glisser-déposer et
l'utilisation de la dernière technologie ADO, ADO.NET.
La technologie XML est intégrée nativement dans .NET, ce qui permet la création plus
facile d'application en ligne ou de sauvegarde de données.
Le générateur de code SQL est beaucoup plus performant.
L'écriture de gestionnaires d'erreurs tient compte du Multithreading via des blocs
TRY/CATCH.
La portée des instructions GOTO est limitée (les sauts ne peuvent se faire qu'au sein d'une
même fonction). Ce comportement est dû au fonctionnement-même de la plateforme .NET
et est commun à tous les langages .NET : C#, J#, etc.
La déclaration des variables est rendue obligatoire par défaut (contrairement au Visual
Basic 6 où cette fonctionnalité était désactivée par défaut).
L'intégration de nouvelles classes d'objet .NET s'est faite tout en permettant pour les
versions intermédiaires de réutiliser les objets .COM rendant la migration plus facile de
Visual Basic 6 à VB Net. VB.NET est le seul langage de .NET à avoir une intégration « en
profondeur » des objets COM.
Les pointeurs vers des fonctions peuvent et doivent (dans 99 % des cas) désormais être
typés (notion de délégués).

Évolutions : VB7 à VB8 (non exhaustif)


Quelques nouveautés ont fait leur apparition entre VB7 et VB8, mais c'est surtout le passage du framework
.NET 1.1 au 2.0 qui marque cette évolution.

En voici tout de même un résumé :

Les classes partielles, permettant de répartir l’implémentation d’une classe sur plusieurs
fichiers.
Les types génériques, évolution typée des templates C++.
Les types « nullables », c'est-à-dire la possibilité de spécifier qu’un type de valeur peut
être nul. Ceux-ci sont déclarés avec le caractère point d'interrogation « ? » suivant le nom
du type, comme ceci : Dim X as Integer? = Nothing (VB9) ou avec une classe
particulière (VB8+). Cette valeur « Nothing » serait, si le « ? » n'était pas spécifié, converti
en 0 dans ce cas-ci. Dans le nouveau système, (X+10) vaudrait « Nothing » (Nothing est
absorbant dans tous les opérateurs), et pas 10 comme cela aurait été le cas autrement.
Tout membre d'une valeur « vide » est « vide ».
La documentation est automatiquement générée depuis des commentaires spéciaux dans
le code.

Évolutions : VB8 à VB9 (non exhaustif)


VB9 a évidemment implémenté toutes les nouvelles fonctionnalités de C#, ainsi que quelques autres :
LINQ, XLINQ, DLINQ…
Expression Trees (fonctions anonymes)
Assouplissement des conversions entre délégués
XML Littéral (http://blogs.codes-sources.com/playtime/archive/2008/05/21/vb9-xml-literal-le
s-d-veloppeurs-c-vont-tre-jaloux.aspx)
Introduction du IF ternaire (équivalent de bool?truePart:falsePart), optimisé par rapport à
IIF()
La migration du code VB6 vers .NET, et la rétro-compatibilité avec ce langage (Classe
VB6) ont été retirés.

Évolutions : VB9 à VB10


VB10 (aussi appelé VBx) marque un tournant majeur dans l'évolution de VB. Outre le fait qu'il sera intégré
dans le Framework 4, il devrait surtout combler totalement son "retard" par rapport à C# sur certains points
(tout comme C# comblera son retard envers VB), vu que la "coévolution" des langages C# et VB.NET a
été officiellement annoncée. Cela assure non seulement un futur stable à VB.NET, qui ne pourra pas être
délaissé par Microsoft mais aussi une garantie que tout ce qui est faisable en C# le sera toujours aussi sous
VB.NET (même si c'est d'une autre façon).

Les fonctionnalités prévues pour VBx :

Objets dynamiques (permet notamment la Programmation orientée prototype et la


communication entre des langages dynamiques (JScript…) et les langages de la
plateforme .NET)
Gestion implicite des interfaces (comme C#)
Gestion des méthodes anonymes
Simplification de l'écriture des tableaux, collections, listes et dictionnaires.

Quelques différences entre C# et VB.NET (non exhaustif)


Voici les différences les plus flagrantes entre VB.NET et C# (VB.NET et C# évoluant, les éléments de cette
liste peuvent être obsolètes):

VB supporte les paramètres optionnels (C# ne le supporte que depuis sa version 4)


VB supporte le "late-binding" (appel d'une propriété/fonction avec son nom, sans connaitre
le type de l'objet (pour les objets COM))
L'espace de nom Microsoft.VisualBasic donne une compatibilité par rapport à VB6. Il est à
éviter si une solution plus performante existe.
L'espace "My" implémente de nombreux appels WMI ou d'IO, ainsi que plusieurs
"raccourcis" dans la gestion des ressources et paramètres d'applications. (VB8+)
VB supporte la structure With
Gestion des évènements simplifiée dans les fenêtres et contrôles
On peut définir une méthode d'interface avec un nom différent que celui proposé au départ
(si on veut redéfinir une fonction dans la classe avec un même nom mais une action
différente)
Support du mot-clé When dans le bloc Catch (exemple : Catch ex as ComException
When ex.ErrNumber = 30)
XML Littéral n'est pas implémenté en C#.
Les Custom Events ne sont pas implémentés en C#.
Une liste des différences (en 2005) entre C# et VB.NET plus complète existe ici (http://www.codeproject.c
om/KB/dotnet/vbnet_c__difference.aspx).

Quelques exemples de code en VB.NET

Hello World en VB.NET (Mode Console)

Public Module HelloWorld

' Les lignes qui suivent sont toutes facultatives, mais conseillées
' Elles sont automatiquement transformées en documentation
''' <summary>Point d'entrée du programme</summary>
''' <param name="Args">Les arguments en ligne de commande passé au programme</param>
Public Sub Main(ByVal Args As String())

' Écrire dans la console


Console.WriteLine("Hello World!")

' Attendre que l'utilisateur appuie sur une touche


Console.ReadKey(False)

End Sub

End Module

Hello World en VB.NET (Mode Windows Forms)

Public Class Form1


Public Sub AfficheMessage()
'1ère solution (Fonctionne aussi en VBScript)
MsgBox("Hello World!")
'2ème solution
MessageBox.Show("Hello World!")
'Autre design
MsgBox("Hello World", MsgBoxStyle.Critical, "Titre, hello world")
'OU
MsgBox("Hello World", MsgBoxStyle.Information, "Titre, hello world")
End Sub
End Class

Boucles et conditions

'
' Une simple condition IF
'
If XCondition = 3 Then
' XCondition vaut 3
ElseIf YCondition <> 4 Then
' XCondition ne vaut pas 3
' YCondition ne vaut pas 4
ElseIf ZCondition Is AnotherObject
' XCondition ne vaut pas 3
' YCondition vaut 4
' ZCondition et AnotherObject renvoient vers le même objet
Else
' Aucune des conditions précédentes n'a été rencontrée
End If

'
' Un Select Case optimisé (Switch en C#)
'
Select Case X
Case 0
' X = 0
Case 1
' X = 1
Case 2
' X = 2
Case Else
' X <> 1
End select

'
' Un SELECT CASE translaté en IF/ELSE IF à la compilation
'
Select Case Y
Case Is < 3
' Y < 3
Case 3
' Y = 3
Case Else
' Y > 3 dans ce cas
End Case

'
' Boucle WHILE
'
While ImTrue
' ImTrue est vrai
' Ici on change la valeur de ImTrue
ImTrue = False
End While
' ImTrue n'est plus vrai

'
' Boucle Do...Loop
'
ImFalse = False
Do
' Aucune condition n'a été appliquée si c'est la première fois
' Sinon, c'est que ImFalse n'est pas faux
' Dans cet exemple, le code n'est pas relancé une {{2e}} fois
Loop Until ImFalse = False
' ImFalse est bien faux

'
' Boucles For et For Each
'
For X As Integer = 0 to 9
' Ce code sera exécuté 10 fois
Next

For X As Integer = 10 To 1 Step -1


' Ce code sera exécuté 10 fois en sens inverse
Next

For Each Element As ElementType In Array


' Ce code sera exécuté autant de fois qu'il y a d'éléments de type ElementType dans Array
Next

Les tableaux

'Créer un tableau de texte, vide et de taille infini


Dim Tableau() As String
'Créer un tableau de nombres naturels, vide et de taille infini
Dim Tableau() As Integer
'Créer un tableau de nombres réels, vide et de taille infini
Dim Tableau() As Double

'Assigne une valeur à la première case du tableau


Tableau(0) = "Case de tableau"
Tableau(0) = 1
Tableau(0) = 1.5

'Créer un tableau de texte de deux lignes et deux colonnes de texte et vide


Dim Tableau(2,2) As String
'Créer un tableau de texte de deux colonnes et une ligne comportant "Bonjour" et "Au revoir"
Dim Tableau() As String = {"Bonjour", "Au revoir"}
'Créer un tableau de texte de deux colonnes et deux lignes
Dim Tableau(,) As String = {{"Colonne 1, ligne 1","Colonne 2, ligne 1"}, {"Colonne 1, ligne
2", "Colonne 2, ligne 2"}}

''Créer un tableau puis le redimensionner en sauvegardant les valeurs


'Créer un tableau de dix lignes et dix colonnes
Dim Tableau(9,9) As String
'Redimensionner en vingt lignes et vingt colonnes en préservant les valeurs
Redim Preserve Tableau(19,19)

'Effacer toutes les valeurs du tableau en récupérant l'espace


Erase Tableau
'Réinitialisation du tableau Tableau à partir de l'élément 1 et pour 5 éléments
Array.Clear(Tableau, 1, 5)

Gestion des exceptions


VB.NET possède les instructions try et catch permettant de gérer les exceptions (comportement non attendu
des instructions du programme).

Exemples :

Try
My.Computer.FileSystem.FileReadBytes("C:\Chemin\Fichier.ext")
Catch Ex as FileNotFoundException 'Pour l'erreur Fichier introuvable
MessageBox.Show("Impossible trouver le fichier", "Erreur")
Catch Ex as Exception 'Pour les autres erreurs.
MessageBox.Show("Une erreur inconnue s'est produite. Erreur renvoyée: " & ex.Message,
"Erreur")
End Try
'Remarquez que ex récupère les données
'de l'erreur, permettant de les traiter.
'Il y a d'autres options que Message. Consultez la documentation Visual Basic .NET pour en
savoir plus.

Try
SomeUnknownCOMObject.DoSomething()
Catch Ex as COMExcpetion When Ex.ErrorCode = 4
' The object was of the excpected type but he throwned
' an error with [[HRESULT]] 4, which is possible as the
' documentation of the object says (it's an exemple).
MessageBox.Show("L'objet n'était pas prêt")
' Throw some new Application-Specific error.
Throw new Exception ("The object was not ready.")
Catch Ex as Exception
' Display some message
MessageBox.Show("Une erreur inconnue s'est produite", "Erreur")
' But throw the (same) exception
Throw
Finally
' Quoi qu'il se passe, on fait cela
' Même si une erreur est survenue, ce code sera lancé
Try : SomeUnkwnowCOMOBject.DoSomethingAnyWay() : Catch ex as Exception : End Try
End Try

Exemple d'utilisation de LINQ

' Retourne un énumérateur qui renvoie tous les noms des fenêtres enfants qui sont des
éditeurs de texte
' Visual Studio 2008 trouve le type de la variable automatiquement, similaire au "var" du C#
Dim AllText = From CW in MyFormInstance.ChildWindows
Where CW.GetType() is GetType(MyTextEditorWindow)
Select CW.Text

' Crée un objet XML (un Document XML, pas une chaine de caractère)
' Visual Studio 2008 trouve le type de la variable automatiquement, similaire au "var" du C#
Dim XMLDoc = _
<root><% For Each Item in Items %>
<item name="<%= Item.Name %>" />
<% Next %></root>
' Sauvegarde dans un fichier le document XML
XMLDoc.Save("FileName.xml")

Exemple d'un événement simple

' Déclaration des objets (fonctions, événements, ...) pour la fenêtre Form1
Public Class Form1

' Lorsque l'utilisateur clique sur l'objet Button1


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
Me.Close() ' On ferme la fenêtre parente (grâce à Me) donc l'application
End Sub
End Class

Exemple d'un code appelant une fonction

Public Class Form1


' Création de la fonction Quitter avec un Private Sub
Private Sub Quitter()
Me.Close()
End Sub

' Lorsque l'utilisateur clique sur l'objet Button1


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
Call Quitter() ' On appelle Private Sub Quitter()
End Sub

' Lorsque l'utilisateur clique sur l'objet Button2


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button2.Click
Call Quitter() ' L'avantage de ce code, c'est qu'on peut appeler Quitter() autant de
fois que l'on souhaite
End Sub
End Class

Identité visuelle

Ancien logo. Logo actuel.

Voir aussi
Sur les autres projets Wikimedia :
Visual Basic .NET, sur Wikibooks

Articles connexes
Microsoft .NET
Visual Studio
C#
Visual Basic
BASIC

Notes et références
1. « Visual Studio 2022 version 17.9.2 Release Notes (https://learn.microsoft.com/en-us/visualst
udio/releases/2022/release-notes#17.9.2) », 27 février 2024 (consulté le 27 février 2024)
2. https://github.com/dotnet/roslyn/blob/1ff27b046b5c03abb38bfeda44eb82da0b8df9de/License
.txt

Liens externes
Centre de développement Visual Basic (https://msdn.microsoft.com/fr-fr/library/2x7h1hfk.as
px), site MSDN de Microsoft
Spécifications du langage Visual Basic (https://www.microsoft.com/en-us/download/detail
s.aspx?id=15039)
Ce document provient de « https://fr.wikipedia.org/w/index.php?title=Visual_Basic_.NET&oldid=211175153 ».

Vous aimerez peut-être aussi