Visual Basic .NET Language
Introduction à la syntaxe
Recherche…
commentaires
La première chose intéressante à savoir, c'est comment écrire des commentaires.
Dans VB .NET, vous écrivez un commentaire en écrivant une apostrophe ou en écrivant REM
. Cela signifie que le reste de la ligne ne sera pas pris en compte par le compilateur.
'This entire line is a comment
Dim x As Integer = 0 'This comment is here to say we give 0 value to x
REM There are no such things as multiline comments
'So we have to start everyline with the apostrophe or REM
Intellisense Helper
Une chose intéressante est la possibilité d'ajouter vos propres commentaires dans Visual Studio Intellisense. Ainsi, vous pouvez rendre vos propres fonctions et classes écrites explicites. Pour ce faire, vous devez taper le symbole de commentaire trois fois la ligne au-dessus de votre fonction.
Une fois cela fait, Visual Studio ajoutera automatiquement une documentation XML:
''' <summary>
''' This function returns a hello to your name
''' </summary>
''' <param name="Name">Your Name</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function Test(Name As String) As String
Return "Hello " & Name
End Function
Après cela, si vous tapez votre fonction de test quelque part dans votre code, cette petite aide apparaîtra:
Déclaration d'une variable
Dans VB.NET, chaque variable doit être déclarée avant son utilisation (si l' option Option Explicit est définie sur On ). Il y a deux manières de déclarer des variables:
- Dans une
Function
ou unSub
:
Dim w 'Declares a variable named w of type Object (invalid if Option Strict is On)
Dim x As String 'Declares a variable named x of type String
Dim y As Long = 45 'Declares a variable named y of type Long and assigns it the value 45
Dim z = 45 'Declares a variable named z whose type is inferred
'from the type of the assigned value (Integer here) (if Option Infer is On)
'otherwise the type is Object (invalid if Option Strict is On)
'and assigns that value (45) to it
Voir cette réponse pour plus de détails sur Option Explicit
, Strict
et Infer
.
- À l'intérieur d'une
Class
ou d'unModule
:
Ces variables (également appelées champs dans ce contexte) seront accessibles pour chaque instance de la Class
, ils sont déclarés. Ils pourraient être accessibles à partir de l' extérieur de la déclaration de Class
en fonction du modificateur ( Public
, Private
, Protected
, Protected Friend
ou Friend
)
Private x 'Declares a private field named x of type Object (invalid if Option Strict is On)
Public y As String 'Declares a public field named y of type String
Friend z As Integer = 45 'Declares a friend field named z of type Integer and assigns it the value 45
Ces champs peuvent également être déclarés avec Dim
mais le sens change en fonction du type englobant:
Class SomeClass
Dim z As Integer = 45 ' Same meaning as Private z As Integer = 45
End Class
Structure SomeStructure
Dim y As String ' Same meaning as Public y As String
End Structure
Modificateurs
Les modificateurs permettent d'indiquer comment les objets externes peuvent accéder aux données d'un objet.
- Publique
Signifie que tout objet peut y accéder sans restriction
- Privé
Signifie que seul l'objet déclarant peut accéder et voir ceci
- Protégé
Signifie uniquement l'objet déclarant et tout objet qui en hérite peut y accéder et l'afficher.
- Ami
Signifie uniquement l'objet delcaring, tout objet qui en hérite et tout objet dans le même espace de noms peut y accéder et le visualiser.
Public Class MyClass
Private x As Integer
Friend Property Hello As String
Public Sub New()
End Sub
Protected Function Test() As Integer
Return 0
End Function
End Class
Écrire une fonction
Une fonction est un bloc de code qui sera appelé plusieurs fois pendant l'exécution. Au lieu d'écrire le même morceau de code encore et encore, on peut écrire ce code dans une fonction et appeler cette fonction chaque fois que cela est nécessaire.
Une fonction :
- Doit être déclaré dans une classe ou un module
- Retourne une valeur (spécifiée par le type de retour)
- A un modificateur
- Peut prendre des paramètres pour effectuer son traitement
Private Function AddNumbers(X As Integer, Y As Integer) As Integer
Return X + Y
End Function
Un nom de fonction, pourrait être utilisé comme déclaration de retour
Function sealBarTypeValidation() as Boolean
Dim err As Boolean = False
If rbSealBarType.SelectedValue = "" Then
err = True
End If
Return err
End Function
est la même chose que
Function sealBarTypeValidation() as Boolean
sealBarTypeValidation = False
If rbSealBarType.SelectedValue = "" Then
sealBarTypeValidation = True
End If
End Function
Initialiseurs d'objet
Types nommés
Dim someInstance As New SomeClass(argument) With { .Member1 = value1, .Member2 = value2 '... }
Est équivalent à
Dim someInstance As New SomeClass(argument) someInstance.Member1 = value1 someInstance.Member2 = value2 '...
Types anonymes (l'option Infer doit être activée)
Dim anonymousInstance = New With { .Member1 = value1, .Member2 = value2 '... }
Bien que similaire
anonymousInstance
ne pas même type quesomeInstance
Le nom du membre doit être unique dans le type anonyme et peut provenir d'une variable ou d'un autre nom de membre d'objet
Dim anonymousInstance = New With { value1, value2, foo.value3 '... } ' usage : anonymousInstance.value1 or anonymousInstance.value3
Chaque membre peut être précédé du mot clé
Key
. Ces membres seront des propriétésReadOnly
, ceux sans seront des propriétés de lecture / écritureDim anonymousInstance = New With { Key value1, .Member2 = value2, Key .Member3 = value3 '... }
Deux instances anonymes définies avec les mêmes membres (nom, type, présence de
Key
et ordre) auront le même type anonyme.Dim anon1 = New With { Key .Value = 10 } Dim anon2 = New With { Key .Value = 20 } anon1.GetType Is anon2.GetType ' True
Les types anonymes sont structurellement équitables. Deux instances du même type anonyme ayant au moins une propriété
Key
avec les mêmes valeursKey
seront égales. Vous devez utiliser la méthodeEquals
pour le tester, utiliser=
ne compilera pas etIs
comparera la référence de l'objet.Dim anon1 = New With { Key .Name = "Foo", Key .Age = 10, .Salary = 0 } Dim anon2 = New With { Key .Name = "Bar", Key .Age = 20, .Salary = 0 } Dim anon3 = New With { Key .Name = "Foo", Key .Age = 10, .Salary = 10000 } anon1.Equals(anon2) ' False anon1.Equals(anon3) ' True although non-Key Salary isn't the same
Les initialiseurs de types Named et Anonymous peuvent être imbriqués et mélangés
Dim anonymousInstance = New With {
value,
Key .someInstance = New SomeClass(argument) With {
.Member1 = value1,
.Member2 = value2
'...
}
'...
}
Initialiseur de collection
Tableaux
Dim names = {"Foo", "Bar"} ' Inferred as String() Dim numbers = {1, 5, 42} ' Inferred as Integer()
Conteneurs (
List(Of T)
,Dictionary(Of TKey, TValue)
, etc.)Dim names As New List(Of String) From { "Foo", "Bar" '... } Dim indexedDays As New Dictionary(Of Integer, String) From { {0, "Sun"}, {1, "Mon"} '... }
Est équivalent à
Dim indexedDays As New Dictionary(Of Integer, String) indexedDays.Add(0, "Sun") indexedDays.Add(1, "Mon") '...
Les éléments peuvent être le résultat d'un constructeur, d'un appel de méthode, d'un accès à une propriété. Il peut également être mélangé avec l'initialiseur d'objet.
Dim someList As New List(Of SomeClass) From { New SomeClass(argument), New SomeClass With { .Member = value }, otherClass.PropertyReturningSomeClass, FunctionReturningSomeClass(arguments) '... }
Il est impossible d'utiliser la syntaxe de l'initialiseur d'objet ET la syntaxe d'initialiseur de collection pour le même objet en même temps. Par exemple, cela ne fonctionnera pas
Dim numbers As New List(Of Integer) With {.Capacity = 10} _ From { 1, 5, 42 } Dim numbers As New List(Of Integer) From { .Capacity = 10, 1, 5, 42 } Dim numbers As New List(Of Integer) With { .Capacity = 10, 1, 5, 42 }
Type personnalisé
Nous pouvons également autoriser la syntaxe de l'initialiseur de collection en fournissant un type personnalisé.
Il doit implémenterIEnumerable
et avoir une méthode accessible et compatible avec les règles de surchargeAdd
(instance, méthode d'extension partagée ou même d'extension)Exemple contruit:
Class Person Implements IEnumerable(Of Person) ' Inherits from IEnumerable Private ReadOnly relationships As List(Of Person) Public Sub New(name As String) relationships = New List(Of Person) End Sub Public Sub Add(relationName As String) relationships.Add(New Person(relationName)) End Sub Public Iterator Function GetEnumerator() As IEnumerator(Of Person) _ Implements IEnumerable(Of Person).GetEnumerator For Each relation In relationships Yield relation Next End Function Private Function IEnumerable_GetEnumerator() As IEnumerator _ Implements IEnumerable.GetEnumerator Return GetEnumerator() End Function End Class ' Usage Dim somePerson As New Person("name") From { "FriendName", "CoWorkerName" '... }
Si nous voulions ajouter l'objet Person à une
List(Of Person)
en mettant simplement le nom dans l'initialiseur de collection (mais nous ne pouvons pas modifier la classe List (Of Person)), nous pouvons utiliser une méthode d'extension' Inside a Module <Runtime.CompilerServices.Extension> Sub Add(target As List(Of Person), name As String) target.Add(New Person(name)) End Sub ' Usage Dim people As New List(Of Person) From { "Name1", ' no need to create Person object here "Name2" }