Comment utiliser une classe d’un projet C # avec un autre projet C #

Dans la même solution, j’ai deux projets: P1 et P2. Comment puis-je utiliser une classe de P1 dans P2?

Ajoutez simplement la référence à P1 de P2

  1. Dans l’arborescence de l’explorateur de solutions, développez le projet P2, puis cliquez avec le bouton droit sur le projet et sélectionnez Ajouter une référence dans le menu.
  2. Dans la boîte de dialog “Ajouter une référence”, sélectionnez l’onglet “Projets” et sélectionnez votre projet P1.
  3. Si vous utilisez des espaces de noms, vous devrez importer les espaces de noms pour vos types P1 en ajoutant des instructions “using” à vos fichiers dans P2.

Notez que les types dans P1 auxquels vous souhaitez accéder directement doivent avoir un niveau d’access suffisant: cela signifie généralement qu’ils doivent être rendus publics.

Paul Ruane a raison, je viens d’essayer moi-même de construire le projet. Je viens de faire une SLN complète pour tester si cela fonctionnait.

Je l’ai fait dans VC # VS2008

<< (Juste aider les autres personnes qui lisent ceci avec () commentaires)

Étape 1:

Faire une solution appelée DoubleProject

Étape 2:

Make Project in solution nommé DoubleProjectTwo (pour ce faire, sélectionnez le fichier de solution, cliquez avec le bouton droit -> Ajouter -> Nouveau projet)

J’ai maintenant deux projets dans la même solution

Étape 3:

Comme Paul Ruane l’a déclaré. aller aux références dans l’explorateur de solution (s’il est fermé, il est dans l’onglet de vue du compilateur). DoubleProjectTwo est celui qui nécessite des fonctions / méthodes de DoubleProject. Dans DoubleProjectTwo, il y a donc une référence à la souris droite -> Ajouter -> Projets -> DoubleProject.

Étape 4:

Inclure la directive pour l’espace de noms:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using DoubleProject; <------------------------------------------ namespace DoubleProjectTwo { class ClassB { public string textB = "I am in Class B Project Two"; ClassA classA = new ClassA(); public void read() { textB = classA.read(); } } } 

Step5:

Faire quelque chose me montrer la preuve des résultats:

 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DoubleProject { public class ClassA //<---------- PUBLIC class { private const string textA = "I am in Class A Project One"; public string read() { return textA; } } } 

Le principal

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using DoubleProjectTwo; //<----- to use ClassB in the main namespace DoubleProject { class Program { static void Main(string[] args) { ClassB foo = new ClassB(); Console.WriteLine(foo.textB); Console.ReadLine(); } } } 

Cela devrait faire l'affaire

J'espère que cela t'aides

EDIT ::: whoops a oublié l'appel à la méthode pour changer la chaîne, ne faites pas la même chose 🙂

La première étape consiste à faire la référence P2 P1 en procédant comme suit

  • Clic droit sur le projet et sélectionnez “Ajouter une référence”
  • Aller à l’onglet Projets
  • Sélectionnez P1 et appuyez sur OK

Ensuite, vous devrez vous assurer que les classes de P1 sont accessibles à P2. Le plus simple est de les rendre public .

 public class MyType { ... } 

Vous devriez maintenant pouvoir les utiliser dans P2 via leur nom complet. En supposant que l’espace de noms de P1 est Project1, alors ce qui suit fonctionnerait

 Project1.MyType obj = new Project1.MyType(); 

La méthode préférée consiste à append une utilisation pour Project1 afin de pouvoir utiliser les types sans qualification.

 using Project1; ... public void Example() { MyType obj = new MyType(); } 

Trop souvent, un nouveau développeur pose cette question simple, qui est un problème commun avec les IDE de Visual Studio. Peu de personnes répondent à la question spécifique et critiquent souvent la question ou donnent des «suppositions» aux solutions qui ne répondent pas aux problèmes communs. Le premier problème commun est que l’EDI vous amène à créer de nouveaux projets plutôt qu’à append de nouveaux fichiers (.java, .py, .cpp, .c) à la solution existante (par défaut, il crée une nouvelle solution) à moins de changer le nom du projet et append à la solution actuelle. Ce problème se produit pour les dossiers de projet Python, java, c #, C ++ et C.

Le nouveau développeur sélectionnant “nouveau> projet> nom du projet et modifiant le répertoire de la solution pour” utiliser la même solution “crée toujours un nouveau” projet “dans le même espace de solution, mais pas dans le même répertoire que le fichier ou la commande d’interface utilisateur actuelle. fichier de ligne qui pose toujours des problèmes avec les erreurs “package not found” lors de la construction et de l’exécution du projet ou de la solution. C’est pourquoi les suggestions de codage ci-dessus pour importer des packages, classes, méthodes et fonctions ne fonctionnent que (et ne répondent donc pas à la question) ) lorsque le fichier “library” ou le “fichier comportement distinct” se trouve non seulement dans le même chemin de répertoire de la solution, mais également dans le même espace de répertoire de l’application “interface utilisateur” ou “shell de commande”. projet en utilisant le nouveau projet> projet> commandes de type de projet de l’EDI Le problème est que le nouveau projet est stocké dans un répertoire différent de celui des fichiers de code d’interface client ou utilisateur existants Pour créer un nouveau fichier dans le même espace projet e Un nouveau projet que le débutant doit faire ce qui suit, que Microsoft ne fera pas pour vous et vous induit même en erreur par rapport aux évidences intuitives par défaut.

  1. Sélectionnez l’application que vous souhaitez importer le nouveau comportement dans un autre fichier
  2. Sélectionner un projet> append un nouvel élément
  3. Sélectionnez le type de modèle de fichier programme tel que filetype.py, filetype.java, filetype.c, filetype.cpp, filetype.C #, etc. ou un type de fichier de classe de bibliothèque (autre chose que les options de fichier de démarrage que vous voyez lorsque vous créez un nouveau projet d’application ou créer un nouveau projet de bibliothèque).
  4. Un nouveau nom de fichier avec le nom par défaut est créé dans votre projet.
  5. Remplacez le nom par défaut du fichier par quelque chose comme library.py ou façade.java, etc.

MAINTENANT, les recommandations de code pour importer des bibliothèques ou utiliser des espaces de noms fonctionneront comme décrit dans les commentaires ci-dessus et vous n’avez pas à modifier les instructions de chemin ou à changer les chemins de solutions et les noms de solutions que Microsoft ne vous laissera pas changer facilement. noms de fichiers ou noms de projets, mais l’EDI ne changera pas automatiquement le chemin du projet ou les noms de chemin de la solution).

L’exemple suivant est un exemple Python mais fonctionne de manière similaire pour C #, java ou C / C ++ en utilisant les commandes includes, namespaces ou using code correspondant à chaque langue pour rechercher du code dans d’autres classes / projets du SAME DIRECTORY SPACE.

Le fichier d’application “hello world” importé depuis d’autres fichiers de code dans le même répertoire.

Notez que les délimiteurs d’espace blanc python ne vont pas dans l’espace correctement dans cet éditeur de commentaires stackoverflow:

 print ("test") from CIXMPythonFacade import ClassA c1=ClassA c1.methodA() from CIXMPythonFacade import functionA functionA() class ClassName(object): def __init__(object, parameter): object.parameter = value 

Le fichier de bibliothèque ou fichier “façade” contenant les classes, méthodes ou fonctions que vous souhaitez importer.

 class class1(object): """description of class""" class ClassA(object): print ("test2") def methodA(): print ("test3") def functionA (): print ("test4") return (0) pass 

Maintenant, comment résolvez-vous le désordre dans lequel l’EDI vous mène? Pour importer du code à partir d’un autre fichier dans le même espace de répertoire, vous ajoutez une référence à celui-ci.

  1. Sélectionnez le fichier d’application
  2. Sélectionner un projet> append une référence
  3. Choisissez le nom de fichier visible avec le chemin de répertoire approprié (cochez-le)
  4. La référence est maintenant disponible pour l’interpréteur, le vérificateur de code et / ou le compilateur.

OK, maintenant que vous avez résolu ce problème, comment reliez-vous vraiment deux projets distincts dans le même espace de solution?

  1. Vous devez aller à la fois aux options de l’indexeur ou de “intellisense” et au compilateur / interprète et vérifier ou modifier / append physiquement les instructions du chemin de répertoire si elles ne correspondent pas à votre “deuxième” espace projet ou solution. Lorsque vous modifiez le chemin ou modifiez les variables de chemin d’access vers votre espace de travail et les emplacements spécifiques des projets qui sont des espaces de répertoire différents, le compilateur et l’parsingur de code peuvent trouver ces bibliothèques, en-têtes.h, espaces de noms, emplacements de projet ou de fichiers.
  2. Pour supprimer les anciens projets que vous avez créés par erreur, c’est encore pire. Vous devez quitter l’IDE de Visual Studio, ouvrir l’explorateur Windows, aller dans le répertoire de l’espace de travail … documents \ visualstudio xxx \ solutionname \ packagename sélectionnez le fichier ou le dossier, cliquez avec le bouton droit et “supprimer” le fichier ou le dossier.
  3. Lorsque vous entrez à nouveau l’EDI et que vous sélectionnez open solution ou open package / solution, les anciens fichiers et noms de solution / package disparaissent, de même que leurs instructions de chemin trompeuses qui empêchent le compilateur et l’parsingur de regarder l’ancien le nom de fichier et changé le nom du projet, il ne change pas le chemin de répertoire avec elle.

Microsoft a vraiment besoin de résoudre ces problèmes afin de créer intuitivement ce que la plupart des gens veulent créer en tant que nouveaux fichiers dans les mêmes répertoires et supprimer les solutions en les sélectionnant et en les supprimant de l’EDI. Les débutants sont tellement frustrés par les instructions de chemin de répertoire si flexibles pour les développeurs expérimentés, mais tellement injustes pour les nouveaux développeurs dans leurs parameters par défaut.

J’espère que cela vous aidera vraiment les nouveaux et empêche les développeurs chevronnés de vous donner les mauvaises réponses qui ne fonctionnent pas pour vous. Ils supposent que vous comprenez déjà les instructions de chemin et que vous souhaitez simplement saisir le bon code … ce qui explique également pourquoi le tunnel tente de corriger votre code mais ne vous aide pas à résoudre le problème. Il s’agit probablement du problème le plus fréquemment décrit en permanence sur stackoverflow avec des réponses erronées qui ne fonctionnent pas pour les nouveaux programmeurs.

Dans le projet P1, rendre la classe publique (si ce n’est déjà fait). Ajoutez ensuite une référence de projet (plutôt qu’une référence de fichier, une erreur que j’ai rencontrée occasionnellement) à P2. Ajoutez une instruction using dans P2 au bon endroit et commencez à utiliser la classe de P1.

(Pour mentionner ceci: l’alternative à rendre la classe publique serait de faire de P2 un ami de P1. Cependant, il est peu probable que ce soit la réponse que vous recherchez, car cela aurait des conséquences. Alors, restz sur la suggestion ci-dessus.)

Disons que votre classe dans le projet 2 s’appelle MyClass.

Evidemment, faites d’abord référence à votre projet 2 sous références dans le projet 1 puis

 using namespaceOfProject2; // for the class calling bit: namespaceOfProject2.MyClass project2Class = new namespaceOfProject2.MyClass(); 

Donc, chaque fois que vous voulez référencer cette classe, vous tapez project2Class. De plus, assurez-vous que cette classe est aussi publique.

Si vous avez deux projets dans un seul dossier de solution. Ajoutez simplement la référence du projet dans another.using à l’espace de noms pour obtenir les classes. Lors de la création de l’object pour cette classe requirejse. Appelez la méthode que vous voulez.

FirstProject:

 class FirstClass() { public ssortingng Name() { return "James"; } } 

Ajouter ici une référence au deuxième projet

SecondProject:

 class SeccondClass { FirstProject.FirstClass obj=new FirstProject.FirstClass(); obj.Name(); }