Question

Si je suis

Dim myRect As Rectangle = New Rectangle(0,0,100,100)

Est-il nécessaires ou tout simplement fin faire plus tard ceci:

myRect = Nothing

Ou il ne faut pas? Merci.

IF il est nécessaire, y at-il d'autres cas, il est pour mes variables?

Était-ce utile?

La solution

En général, comme Joel dit , il est inutile.

Dans votre exemple spécifique, cependant, il est en fait inutile . Rectangle est type de valeur , donc la mise à Nothing est pas même affectant le compteur de référence d'un objet; il est l'attribution d'un nouveau valeur (la valeur par défaut pour Rectangle) à votre variable myRect. Ceci est analogue à avoir une variable d'Integer et le mettre à 0 à la fin d'un procédé. Ne vous acheter quoi que ce soit.


Je tiens à souligner que la demande « La définition de toute variable Nothing [ou null en C #] accomplit jamais rien » * est un mythe. Il est tout à fait possible que vous pouvez avoir un champ dans une classe que vous pourriez aussi bien mettre à null si l'objet référencé n'est plus nécessaire, mais vous avez encore une référence à l'instance de la classe elle-même.

Par exemple simpliste, supposons que vous aviez une certaine classe de conteneur qui enveloppe un tableau de T[], et vous donner ce contenant une méthode Empty. Il peut être judicieux de mettre tableau interne à null dans cette méthode, ce qui se traduirait par zéro références à l'objet de tableau du conteneur, il se qualifier pour la collecte des ordures. (Vous pouvez ensuite créer un nouveau tableau lorsque le code externe suivant a essayé d'ajouter un T à la collection.) Si vous n'avez pas défini le champ null sur Empty, alors il y aurait encore une référence au tableau (c.-à-champ) et donc ce serait une petite quantité de mémoire utilisée que vous ne avez pas vraiment besoin.

Comme je l'ai dit, c'est un exemple simpliste. Et honnêtement, il est rare que vous avez besoin d'envisager des scénarios comme ça. Je pensais juste que je le mentionner afin que vous ne recevez pas la fausse impression que la fixation d'un champ pour Nothing littéralement jamais rien accomplit.

* Je ne cite pas réellement spécifique quelqu'un ici; c'est juste une généralisation que j'ai entendu dit plus d'une fois.

Autres conseils

Ne pas le faire. Cela était important de faire dans les jours VB6, mais pour .Net il est possible (bien que très improbable) de jeter effectivement le garbage collector hors tension et avoir d'autres effets secondaires inattendus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top