By val et By ref appliquées à des objets de types structurés
Bonjour,
Voici le code suivant en Vb.net qui est des plus simples
Code:
1 2 3 4 5
|
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox2.Text = "Bonjour"
End Sub |
L’argument sender est transmis par valeur alors qu’il est de type Objet donc structuré.
Il en est de même pour l’argument e de type EventArgs
Pouvez vous m’expliquer pourquoi on n’utilise pas ByRef pour
les passage des arguments sender et e
De la même manière lorsque l’on crée un nouveau SqlDataAdapter par exemple avec cette instruction
Code:
1 2 3
|
ObjDA As SqlDataAdapter
objDA = New SqlDataAdapter(StrSQLThesaurus1, objConn) |
D’après le constructeur de la classe SqlDataAdapter, l’argument objConn, qui ,à la base, est de type SqlConnection, donc de type structuré, est passé par valeur et non pas par référence
Pouvez vous m’en expliquer la raison.
Merci beaucoup à vous.
Autre et dernière question:
J'ai crée un dataset objDS qui contient le resultat d'une selection de termes de la table TERMES, comme vous pouvez le comprendre d'après ce code
On suppose que objConn est une connxion à la BDD déjà initialisée
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
StrSQLThesaurus1 as String
StrSQLThesaurus1 = "SELECT ID_TERME,LIB_TERME from TERMES;"
'on ajoute la table THESAURUS_objDS au dataset objDS
objDA = New SqlDataAdapter(StrSQLThesaurus1, objConn)
objDS = New DataSet
objDA.Fill(objDS, "objDS_THESAURUS")
objConn.Close() |
Pour chaque ligne de la table objDS_THESAURUS du dataset objDS, qui contient donc le contenu des champs ID_TERME et LIB_TERME de la table TERMES, on ajoute un ListViewItem à la ListView appelée List_view_termes et par la fonction Add, on recupère l'adresse du nouveau ListViewItem dans la variable lvi
Code:
1 2 3 4 5
|
Dim lvi as ListViewItem
For Each ligne_table_termes_objDS In objDS.Tables("THESAURUS_objDS").Rows
lvi = List_view_termes.Items.Add(ligne_table_termes_objDS("LIB_TERME")) |
Du fait que j'ai mis l'option Strict à ON, je reçois un message qui m'annonce que du fait de cette option Strict à ON, il ne peut y avoir de conversion implicite du type Object vers le type String.
Pourquoi ligne_table_termes_objDS("LIB_TERME")) est il considéré comme étant de type Object et pas de type dataRow.
Merci beaucoup encore de votre aide.
Bien cordialement.
Nathalie
By val, Byref explications
Bonjour et merci beaucoup de toutes ces explications dont j'avias besoin.
Le lien vers le sujet expliqué est super.
Je regrette simplement qu'au niveau di code on ne voie pas ecrit l'appel de la méthode Modifieur
Voici , selon moi le code exact
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
Public Sub Main()
Dim val As New MaClasse
val.membre = "hello"
Modifieur(val)
Console.WriteLine(val)
End Sub
Private Sub Modifieur(ByVal variable As MaClasse)
variable.membre = "world"
End Sub |
Merice encore pour tout.
Cordialement.
Nathalie