3 votes

VB.Net forme des méthodes non partagées référencées comme si elles étaient partagées ?

J'apporte mon soutien à une application VB.Net, bien que je sois avant tout un développeur C#. J'ai rencontré ce que je considère comme un code "étrange", en ce sens que mon esprit C# me dit que le code est erroné et ne devrait pas compiler, mais il le fait. J'ai fait un Trouver toutes les références sur un formulaire particulier pour voir où il était utilisé et il a trouvé des références au formulaire où des méthodes de la classe qui n'ont pas été détruites étaient directement référencées sans que la classe soit instanciée. En d'autres termes, je vois du code comme celui-ci :

FrmCareer.ShowDialog(careerId)
FrmCareer = Nothing

Maintenant ShowDialog es no est un membre partagé, et il fait référence à des variables de membre d'instance, donc je ne m'attendrais pas à ce qu'intellisense liste les variables de membre d'instance. ShowDialog du tout. Mais elle le fait et elle compile. Quelqu'un peut-il m'expliquer ce qui se passe ici ?

6voto

Konrad Rudolph Points 231505

VB.NET dispose d'une fonctionnalité (très intéressante) qui permet de conserver une collection de tous les formulaires en tant que propriétés sous le nom de l'utilisateur. My.Forms objet. Les objets qui s'y trouvent sont instanciés lorsque vous y accédez pour la première fois. De cette façon, vous obtenez une instance par défaut de chaque formulaire à laquelle vous pouvez vous référer.

D'un autre côté, VB insiste pour importer le fichier My.Forms les propriétés de l'objet à l'échelle mondiale et il n'y a rien que tu puisses faire pour changer ça.

En d'autres termes, le nom de classe de n'importe quel formulaire de votre application fait office d'instance globale de ce formulaire.

1voto

Rob I Points 2750

Est FrmCareer le nom du formulaire ? Si c'est le cas, je pense qu'il y a une sorte de variable magique de type "singleton" pour chaque formulaire à laquelle vous pouvez accéder de cette manière. L'idée étant que le développeur ne veut probablement qu'un seul FrmCareer afin que tout code puisse y accéder comme ceci (pour afficher le formulaire, dans ce cas). En termes de C#, ce serait comme un static global.

Ah oui, voir cette question - il a une meilleure explication.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X