9
votes

L'utilisation de Global :: pour des espaces de noms conflictuels

De ce que je comprends, le qualificatif global :: vous permet d'accéder à un espace de noms qui a été masqué par un autre avec le même nom. page MSDN utilise système à titre d'exemple. Si vous créez votre propre espace de noms système , vous pouvez atteindre l'original avec global :: système . La première chose qui vous est venue à l'esprit, c'est pourquoi quelqu'un appelle-t-il son espace de noms système ?? La page continue à dire que cela n'est évidemment pas recommandé, mais la duplication des espaces de noms est très possible dans les grands projets. Si / quand cela se produit, est-ce un signe que les choses se dirigent dans la mauvaise direction ou sont-elles des raisons valables d'avoir des espaces de noms conflictuels?


4 commentaires

Y a-t-il de bonnes odeurs de code? : p


@RPFLO: Peut-être qu'il veut dire "est-ce une odeur de code sévère?"


Great Tag: Evil-Draers .


Si vous n'avez pas au moins une odeur de code, vous n'êtes pas sur une date limite.


5 Réponses :


13
votes

En général, global :: est utilisé pour indiquer "Je veux commencer en haut de la structure d'espace de noms". Si j'ai un espace de noms appelé myProduct.System , alors tout ce qui réside dans l'espace de nom myProduct ne sera pas en mesure d'accéder au système Microsoft SYSTEM NAMES. Est-ce une odeur de code? Peut-être parfois, mais pas particulièrement smelly.


0 commentaires

6
votes

Tout code généré par machine devrait essayer d'utiliser global :: afin de minimiser le potentiel de conflits d'espace de noms, cela peut ne pas être au courant. De plus, l'un de votre code qui peut courir dans des conflits peut l'utiliser pour être plus spécifique.


0 commentaires

6
votes

Une raison légitime d'avoir des espaces de noms contradictoires pourrait être l'utilisation de bibliothèques internes écrites pour des versions antérieures de .NET qui ne contenaient pas de fonctionnalités ajoutées dans les versions ultérieures. Dans le fichier .NET 1.1 jours, par exemple, j'ai écrit une classe de registre que les appels de registre d'API emballés. Par pure hasard, les noms de méthode que j'ai choisis étaient exactement les mêmes que ceux de la classe de registre ultérieure .NET, et ils ont fait exactement les mêmes choses, il était donc facile de débrancher mon code local. Pour des trucs plus compliqués, être capable d'utiliser un morceau de code plus ancien et mal nommé avec le qualificatif global :: pourrait être utile.

nommer intentionnellement un nouveau morceau de code à l'aide d'un espace de noms .NET existant serait définitivement une odeur de code, cependant.


0 commentaires

0
votes

Je pense que cela se produit de temps à autre que l'un de vos espaces de noms a le nom d'un autre. Par exemple, j'ai une espace de noms .persistence.nibernate, où NHibernate pourrait également être l'espace de noms root de l'assemblage NHibernate.

Je ne vois aucune odeur de code ici, il s'agit juste de nommer ISSES;)


0 commentaires

2
votes

Microsoft a quelques bonnes lignes directrices d'espace de noms dans l'excellent livre < Code> Directives de conception-cadre 2nd ed. . En général, ils recommandent d'introduire des modificts (par exemple, en nommant votre flux de types).

Je ne crois pas que j'ai jamais utilisé le niveau mondial :: qualificatif. Je considérerais généralement une odeur de code (bien qu'il y ait des exceptions, comme la musiggénérées et les svariables sointes).


0 commentaires