Quelle est la raison pour laquelle je dois faire les deux pour les bibliothèques standard? Pour tous les autres langages que j'ai utilisés, je n'ai besoin que d'un pour accéder aux bibliothèques standards.Pourquoi les bibliothèques standard pour C# ont-elles besoin à la fois d'une référence d'assembly et d'une importation?
Répondre
Une référence d'assembly rend le code de l'assembly disponible à un autre assembly. Une directive using
permet aux types d'un autre espace de noms d'accéder à un fichier source donné. Ce sont des concepts complètement distincts. Si vous étiez enclin, vous pouvez vous en tirer sans utiliser la directive usings
et en utilisant des noms de types complets. De même, il est possible d'utiliser la directive usings
pour faire référence à d'autres espaces de noms dans le même ensemble.
De plus, il existe un analogue parfait entre les assemblages/pots et les utilisations/importation entre Java et C# pour les besoins de cette discussion. Donc C# est à peine unique ici.
Eh bien, le compilateur C# pourrait automatiquement référencer tous les assemblages dans le GAC qui contiennent des classes dans un espace de noms importé par une directive 'using'. C'est ce que Java fait (regardez dans tous les jars du chemin de la classe pour les types dans les paquets importés). – dtb
@dtb, IMO, en passant le classpath à vos bibliothèques à java.exe est l'équivalent des références d'assemblage - bien que je sois d'accord avec votre point qu'en C# il est granulaire par projet. –
Pour éviter toute confusion: l'utilisation ** statement ** est celle utilisée avec IDisposable pour l'élimination déterministe des ressources. La directive ** ** est la vedette ici. –
Visual Studio a besoin de certains attributs d'une référence pour décider comment le résoudre lors de l'exécution et comment le déployer lors de la construction du projet. Ces options ne peuvent pas être impliquées par une simple déclaration d'importation.
Pourriez-vous entrer dans plus de détails? – Casebash
Bien sûr. Je viens d'ouvrir VS et créé un nouveau projet C# (Windows Forms). Le modèle par défaut de ce projet fait référence à un certain nombre d'assemblys système. Si vous cliquez avec le bouton droit de la souris et choisissez Propriétés, une grille de propriétés s'ouvre ci-dessous, et elle détaille toutes les différentes options pour traiter cette référence. Les plus importants ont à voir avec si la référence est copiée dans le dossier bin du projet (et ensuite probablement inclus dans un programme d'installation groupé), ou si la référence doit être résolue via le GAC. En outre, il détermine le type de liaison de version, c'est-à-dire s'il nécessite cette version spécifique ou non. – Marco
Vous devez référencer les assemblys pour indiquer au compilateur l'emplacement des types exportés. Vous n'avez pas besoin d'inclure des espaces de noms, mais cela facilite la lecture du code car vous pouvez éviter les noms complets. De plus, étant donné que chaque assembly peut exposer plusieurs espaces de noms, il constitue un moyen pratique de regrouper les types associés.
Les références d'assemblage sont un concept de la plate-forme, tandis qu'une importation d'espace de noms est un concept du langage.
Vous devez fournir une référence d'assembly au compilateur car il doit savoir où se trouve le code de bibliothèque que vous utilisez. Mais la directive using
est purement facultative. Ces deux compileront bien:
Exemple 1:
System.Console.WriteLine("Without a using directive");
Exemple 2:
using System;
//...
Console.WriteLine("With a using directive");
La directive using
ne sert qu'à vous éviter d'avoir à écrire des noms qualifiés dans tous les sens.
- 1. C bibliothèques non-standard
- 2. J'ai besoin de Référence et Explication de toutes les fonctions standard C
- 3. Documentation de référence/de référence sur les types de bibliothèques standard Scala
- 4. Importation de toute la bibliothèque standard Python
- 5. Bibliothèques Standard Flash?
- 6. Référence complète en ligne pour la bibliothèque standard C?
- 7. Importation de bibliothèques dans Eclipse par programmation
- 8. NetBeans C++ ne trouve pas les bibliothèques standard (Macintosh)
- 9. Doit bibliothèques standard pour python débutant
- 10. Lua .NET Comment utiliser les bibliothèques standard et tierces
- 11. Dans les stubs Linux sont utilisés pour les bibliothèques standard. Pourquoi les talons sont-ils requis?
- 12. Conversion UTF-8 avec les bibliothèques standard C++ (no/clr)
- 13. Calltree pour le programme c + + à la bibliothèque standard
- 14. Utilisation de bibliothèques standard .Net avec VBA
- 15. Pourquoi il y a une différence entre "importation" et "importation *"?
- 16. Pourquoi ai-je besoin de bibliothèques spéciales (binaires) construites pour chaque version de Visual C++?
- 17. pourquoi avons-nous besoin à la fois const et getters non-const dans cet exemple
- 18. Bibliothèques C# pour CouchDB?
- 19. Les bibliothèques tierces font référence à différentes versions de log4net.dll
- 20. java et bibliothèques C# pour wi-fi
- 21. Compression XML compatible à la fois avec Java et C#
- 22. C++ nouveau standard, technologies et plus
- 23. Existe-t-il une version à plusieurs caractères de strchr() dans les bibliothèques C standard?
- 24. standard C ou bibliothèques Python pour calculer l'écart-type de la distribution normale
- 25. Besoin de bibliothèques pour comparer les pistes vocales (prononciation)
- 26. Implications de licence pour les bibliothèques et les implémentations de référence
- 27. bibliothèques c couramment utilisées pour les applications?
- 28. Bibliothèques C# pour les actions temporisées
- 29. pourquoi __builtins__ est à la fois module et dict
- 30. JOIN SQL pour retourner les lignes NULL à la fois la table gauche et à droite
C# est loin d'être unique en cela. Java et C++ ont tous deux ceci. C++ est encore pire, en ce que vous * devez * faire les deux: dites à l'éditeur de liens à propos de la bibliothèque, et ajoutez un '# include'. –
@Martinho: Mais pas pour les bibliothèques standard en C++ – Casebash
sûr. Vous pourriez dire que la même chose se passe en C#, sauf que l'ensemble des bibliothèques auto-référencées est plus petit: seulement mscorlib.dll et System.dll, je pense. –