web-dev-qa-db-fra.com

Pourquoi C # n'a-t-il pas de fichiers d'en-tête? L'espace de noms prendra-t-il tout en charge?

Je suis un programmeur débutant, quelqu'un peut-il parler clairement de l'utilisation des fichiers d'en-tête et des espaces de noms en C #?

Parce qu'en C++ j'utilisais ******.h fichiers pour lire les fonctions de la bibliothèque. Et quand j'ai vu des exemples de programmes en C # qui manquaient, quelqu'un peut-il me dire pourquoi?

J'utilise C # pour développer un outil personnalisé pour un logiciel mécanique CAD, là où j'utilise la fonction appropriée pour ouvrir le fichier (fichier CAD), le compilateur me donne une erreur indiquant que le les noms de fonctions que je fournis ne sont pas disponibles dans le contexte.

Lorsque j'ai ouvert le fichier d'aide de cette application CAD la fonction qui est responsable de l'ouverture du fichier a été mentionnée sous un fichier d'en-tête appelé uf_part.h. Mais il existe un espace de noms appelé NXopen.

J'ai utilisé l'espace de noms comme using NXopen en Visual Basic, n'est-ce pas suffisant? Dois-je également fournir ce fichier d'en-tête? Si c'est le cas, comment ? Veuillez m'aider.

17
Senthur

C # est plus "convivial pour les programmeurs". Lorsqu'il s'agit de fichiers du même projet, au lieu de spécifier manuellement "fichier d'en-tête" à chaque fois, il va rechercher dans tous les fichiers de projet une correspondance en fonction de l'espace de noms.

Pour comprendre cela, procédez comme suit:

  1. Démarrez un nouveau projet dans Visual Studio. (Quel que soit le type, WinForms ou la console)
  2. Cliquez avec le bouton droit sur le projet et ajoutez une nouvelle classe.
  3. Dans votre note de classe principale, vous pouvez voir la nouvelle classe que vous venez d'ajouter, sans ajouter d'en-tête.

Comment cela se fait-il? Simplement en ayant le même espace de noms pour les deux classes. Le moteur .NET est suffisamment intelligent pour relier toutes ces classes ensemble.

Maintenant, quand il s'agit de externe code signifiant du code assis dans un autre fichier DLL), l'astuce consiste à ajouter une référence à ce DLL (dans Studio -> Projet de clic droit -> Ajouter une référence -> Parcourir), vous devez spécifier que vous allez utiliser cela DLL en ajoutant un en utilisant l'instruction en haut:

using ExternalDllName.ExternalNamespace;

C'est à peu près ça. Contrairement à C++, vous n'avez pas besoin d'avoir .h fichier en tant que .NET recherchera automatiquement une correspondance dans les fichiers référencés DLL.

22
Shadow Wizard

Le fichier d'en-tête n'existe pas dans .net, car toutes les métadonnées nécessaires sont contenues dans l'assembly référencé lui-même.

Avez-vous référencé l'assemblage nécessaire dans votre projet? Veuillez également noter qu'il n'y a pas de "fonction" en C #, seulement des méthodes de classe (ce qui signifie que vous devez spécifier un objet ou une classe statique dans votre appel).

Aussi: Structure générale d'un programme C #

8
Serg Rogovtsev

Les compilateurs pour les langages modernes, tels que C # ou Java stocke dans des fichiers compilés des informations sur les classes et les méthodes qu'ils contiennent, et ces informations peuvent être utilisées pour vérifier l'exactitude des appels effectués à partir d'un fichier source vers un autre ou à des cours de bibliothèque.

Lorsque C a été inventé l'espace disque, la mémoire et la puissance CPU étaient des ressources précieuses et cette approche n'aurait pas été possible. Les fichiers d'en-tête ont été introduits pour permettre au compilateur de vérifier que les différents fichiers source étaient conformes à la même interface. Lorsque le C++ a été inventé, l'approche décrite ci-dessus aurait pu être possible, mais je suppose qu'elle a été choisie pour s'en tenir au C pour des raisons de compatibilité.

5
Nicola Musatti