Il est connaissance commune ( et convention ) que les espaces de noms sont utilisés pour code d'identification unique et éviter les conflits de noms, c'est pourquoi vous devez toujours placer votre propre code dans un espace de noms unique.
Mais , ...
Les espaces de noms sont également utilisés pour regrouper des classes logiquement pertinentes. Ma bibliothèque personnelle s'étend simplement sur la Framework Class Library (FCL) et met en œuvre toutes les fonctionnalités que je trouve manquantes dans la FCL. Elle contient principalement des classes d'extension et d'aide, ainsi que d'autres classes hautement réutilisables. J'ai trouvé très utile de suivre la même structure d'espaces de noms que dans la FCL.
Je suis allé un pas de plus et j'ai commencé à utiliser les espaces de noms du FCL pour "injecter" mon code dans les espaces de noms où je l'attendais.
L'un des avantages est qu'il n'est pas nécessaire de définir autant d'utilisations. Par exemple, en faisant simplement référence à la bibliothèque, les méthodes d'extension sont immédiatement disponibles sans qu'il soit nécessaire d'ajouter des utilisations supplémentaires. A titre d'exemple (pour ceux qui aiment garder leur liste d'utilisations propre), combien de fois vous attendez-vous à ce que les méthodes d'extension fonctionnent, pour vous rendre compte que vous n'avez pas encore ajouté "using System.Linq ;"?
MISE À JOUR :
Le principal avantage, selon moi (comme mentionné dans les commentaires), est que vous avez l'accès à davantage de services publics, plus facilement sans avoir à rechercher les espaces de noms spécifiques. Par exemple, si vous utilisez System.Collections.Generic
, des méthodes d'extension immédiate pour les IList<T>
sont disponibles.
Je soutiens que cet avantage pourrait en fait l'emporter sur les inconvénients. Le fait que des conflits de noms puissent se produire à l'avenir ne me dérange pas, car cela indiquerait qu'une nouvelle version de la CMF inclut effectivement quelque chose de similaire à ce que je souhaitais. En fait, il est plus facile de remarquer les changements dans le FCL, que je voudrais de toute façon refléter dans mes espaces de noms.
Bien sûr, je comprends que cela irait radicalement mal si tout le monde commençait à faire cela pour les bibliothèques publiques, mais pour mes projets individuels, je trouve que c'est vraiment utile.
Ai-je oublié des autres les inconvénients ? J'ai déjà envisagé le cas où je voudrais rendre la bibliothèque publique, je dois trouver un moyen d'autoriser l'utilisation de la fonction System
ou un espace de noms différent, selon le souhait de l'utilisateur. À ma connaissance, la seule façon de procéder dans l'environnement .NET est la suivante l'utilisation de prédirectives .
MISE À JOUR 2 :
Donc, comme je l'ai dit, je suis conscient que certaines personnes peuvent trouver cela gênant et souhaiter un espace de noms différent. Pour mes propres projets, je trouve qu'il n'est pas pratique de faire, par exemple, ce qui suit :
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media
using System.Windows.Media.Media3D;
using MyNamespace.Windows;
using MyNamespace.Windows.Controls;
using MyNamespace.Windows.Media;
using MyNamespace.Windows.Media.Media3D;
Sans oublier ce problème qui rend par exemple using MyNamespace.System.Windows;
impossible.
Formuler une question en espérant obtenir des réponses plus utiles :
Existe-t-il une solution plus efficace que de placer le code dans l'espace de noms System ? Existe-t-il un moyen de faciliter compiler dans un espace de noms différent quand on le souhaite, en dehors des prédirectives, ou est-ce une mauvaise idée ?