-
Déclaration de variable
Bonjour, j'ai fait des recherches sur google et je n'ai pas trouvé ma réponse, donc je vais prendre une chance et la demander ici.
Quand je déclare mes variables je fais : Dim NomVariable as integer
J'ai eu aucun problème jusqu'a temps que j'utilise une variable de type random:
Dim NomVariable as random
J'utilise après NomVariable.next pour générer un autre nombre. Mon problème est que je devais mettre dim NomVariable as new random
Pourquoi je dois utiliser le mot new pour déclarer la variable, quel est la différence avec une déclaration de type integer?
Merci
-
grande question existentielle :)
En .NET, il y a 2 grandes catégories de types :
- Les types valeur : les types primitifs tels que Integer, Double ou Boolean, les Enum, les DateTime, et d'une manière générale tous les types déclarés comme "Structure". Les objets de type valeur contiennent leurs propres données, et sont manipulés par valeur, c'est à dire qu'ils sont copiés à chaque fois qu'on les affecte à une variable, qu'on les passe en paramètre d'une méthode, ou qu'on les renvoie en résultat d'une méthode. Les types valeurs ne peuvent pas valoir Nothing. En VB.NET ils sont implicitement initialisés à leur valeur par défaut, si bien qu'il n'y a pas besoin de les instancier explicitement avec New
- Les types référence : tous les autres types : String, Object, Random... bref, tous les types déclarés comme Class. Ces objets sont manipulés par référence : cela signifie qu'une variable de type référence ne contient pas directement les données, mais seulement une référence vers l'emplacement des données. On ne manipule pas directement l'objet mais seulement une référence vers l'objet. Si tu as déjà fait du C, tu peux voir ça comme un pointeur (ce n'est pas tout à fait pareil mais c'est une analogie qui aide à comprendre ce que c'est). Si tu copies une variable de type référence vers une autre, tu ne copies pas l'objet lui-même : tu copies seulement la référence. Par défaut, une variable de type référence vaut Nothing, ce qui signifie qu'elle ne pointe vers aucun objet. Tu ne peux donc pas l'utiliser avant de lui avoir affecté une instance d'objet.
Une autre explication, sur le site de MSDN :
http://msdn.microsoft.com/fr-fr/library/t63sy5hs.aspx
Dans ton cas, tu déclares une variable qui est une référence vers un objet Random, mais tu n'as pas précisé de quel objet il s'agissait, donc par défaut la variable vaut Nothing. Il faut lui affecter un objet (New Random dans ton cas) pour pouvoir l'utiliser.
Attention aussi à ne pas confondre la notion de type valeur/type référence avec la notion de passage de paramètres par valeur (ByVal) ou par référence (ByRef). Il y a une explication très complète ici :
http://www.developpez.net/forums/d29...f/#post1867839