2014-04-30 7 views
0

J'essaie de définir une variable globale dans Visual Studio, mais je ne peux pas la rendre statique. Y a-t-il un moyen pour moi de définir la variable comme statique et de la partager entre différentes méthodes, ou de sauvegarder la variable chaque fois qu'elle change?Déclaration de variables statiques globales

+0

Statique dans VB.NET est 'Shared'. Appelez-le de cette façon: 'ClassName.SharedVariableName'. Il doit être public pour être accessible depuis l'extérieur de cette classe. Notez que vous ne le partagez pas uniquement entre les méthodes mais également entre différents threads qui peuvent provoquer des verrous ou des résultats incorrects (par exemple, dans ASP.NET). –

+0

Merci pour l'assurance sur "Shared" étant statique. Il semble que je rencontre une erreur d'exécution dans mon travail ou que j'utilise la forme de variable "Partagé". Pourriez-vous s'il vous plaît me donner un exemple? – user3568182

+0

Pouvez-vous poster votre code –

Répondre

3

Vous avez deux options:

1 - Créer une classe qui contient une variable partagée (ce qui est la même une variable statique C#)

Public Class GlobalVariables 
     Public Shared Bar As String 
    End Class 

Vous pouvez accéder à ce en utilisant le nom de classe :

GlobalVariables.Bar = "Hello world" 

2 - Créer un module (ce qui est semblable à une classe statique C#)

Public Module GlobalVariables 
     Public Bar As String 
    End Module 

Vous pouvez accéder à cette valeur dans le code comme ceci:

Bar = "Goodbye cruel world" 
+0

Ce que j'ai fait était de placer la variable Shared dans la même classe que les méthodes utilisées, et de l'appeler le nom de la variable sans le nom de la classe. dans classname.variablename car il était dans la même classe. Serait-ce l'erreur? Aussi, est-ce que je mets une méthode comme si vous trouviez une fonction de clic de bouton (par exemple)? – user3568182

0

Si vous utilisez le numéro 1 option présentée par @ Matt Wilko, vous pouvez référencer le membre partagé soit par une instance d'objet de la classe ou en référençant la classe sans référence d'objet. Les deux pointent vers et incrémentent la même variable et font donc référence à la même valeur. Bien que le compilateur Visual Studio fournisse un avertissement concernant le référencement d'une instance d'objet et indique qu'il ne sera pas évalué, il compile toujours. La recommandation du compilateur est d'utiliser le nom de la classe.

Public Class GlobalVariables 
    Public Shared Foo As Integer 
End Class 

Insérer ce qui suit dans un formulaire et appelez IncrementIntegers() à partir d'un bouton procédure d'événement de clic et vous constaterez que myGlobalVariables.Foo et GlobalVariables.Foo retour à la fois 20.

Private Sub IncrementIntegers() 
    Dim myGlobalVariables As New GlobalVariables 
    myGlobalVariables.Foo = 0 
    GlobalVariables.Foo = 0 
    myGlobalVariables.Foo += 10 
    GlobalVariables.Foo += 10 
    Dim iLocalInt1 = myGlobalVariables.Foo 
    MessageBox.Show("myGlobalVariables.Foo = " & iLocalInt1.ToString) 
    Dim iLocalInt2 = GlobalVariables.Foo 
    MessageBox.Show("GlobalVariables.Foo = " & iLocalInt2.ToString) 
End Sub 

Notez que avec option 1, Foo doit être qualifié avec le nom de la classe ou un nom d'objet. Avec l'option 2, c'est un module et non une classe donc une référence d'objet ne peut pas être créée. La variable publique peut être référencée sans la qualifier avec le nom du module sauf si une variable du même nom apparaît dans un autre module auquel cas le compilateur avec une erreur de conflit de nom. Par exemple,

Public Module1 

    Public Foo As String 

End Module 

Public Module2 

    Public Foo As String 

End Module 

Supprimer Module2 et Foo peuvent être appelés non qualifiés de n'importe où.

Foo = "Happy birthday" 

Avec présent Module2, Foo doit être qualifié avec le nom à la fois comme le point à la variable différents et représentent des valeurs différentes et indépendantes.

Module1.Foo = "Goodbye cruel world" 
Module2.Foo = "Hello new world" 
+0

Cela a été répondu et résolu, merci à tous. – user3568182

Questions connexes