Dans la même solution, j'ai deux projets: P1 et P2. Comment puis-je utiliser une classe de P1 dans P2?
Dans la même solution, j'ai deux projets: P1 et P2. Comment puis-je utiliser une classe de P1 dans P2?
Réponses:
Ajoutez simplement la référence à P1 depuis P2
Notez que les types de P1 auxquels vous souhaitez accéder directement doivent avoir un niveau d'accès suffisant: cela signifie généralement qu'ils doivent être rendus publics.
Paul Ruane a raison, je viens de m'essayer à la construction du projet. Je viens de faire un SLN entier pour tester si cela fonctionnait.
J'ai fait ça dans VC # VS2008
<< (Juste aider les autres personnes qui lisent ceci aussi avec () commentaires)
Étape 1:
Créer une solution appelée DoubleProject
Étape 2:
Créer un projet dans une solution nommée DoubleProjectTwo (pour ce faire, sélectionnez le fichier de solution, clic droit -> Ajouter -> Nouveau projet)
J'ai maintenant deux projets dans la même solution
Étape 3:
Comme l'a déclaré Paul Ruane. aller aux références dans l'explorateur de solutions (s'il est fermé, il est dans l'onglet vue du compilateur). DoubleProjectTwo est celui qui a besoin des fonctions / méthodes de DoubleProject, donc dans DoubleProjectTwo, faites référence à la souris avec le bouton droit de la souris -> Ajouter -> Projets -> DoubleProject.
Étape 4:
Incluez 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();
}
}
}
Étape 5:
Faites quelque chose pour 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 oublié l'appel de méthode pour changer réellement la chaîne, ne faites pas la même chose :)
Trop souvent, un nouveau développeur pose cette question simple qui est un problème courant spécifiquement avec les IDE de Visual Studio. Peu de gens répondent à la question spécifique et critiquent souvent la question ou donnent des «suppositions» pour des solutions qui ne répondent pas aux problèmes courants. Le premier problème courant est que l'EDI vous amène à créer de nouveaux projets plutôt qu'à ajouter de nouveaux fichiers (.java, .py, .cpp, .c) à la solution existante (par défaut, il crée une nouvelle solution) sauf si vous changez le nom du projet et ajouter à la solution actuelle. Ce problème se produit pour les dossiers de projet Python, java, c #, C ++ et C.
Cela ne se produit pas lorsque vous ajoutez un autre projet à l'aide des commandes de type nouveau> projet> projet de l'EDI. Le problème ici 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 de projet plutôt qu'un nouveau projet, le débutant doit effectuer les opérations suivantes que Microsoft ne fera pas pour vous et vous éloigne même de l'évidence intuitive par défaut.
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 les chemins de solutions et les noms de solutions que Microsoft ne vous permettra pas de modifier facilement (c'est-à-dire que vous pouvez modifier le les noms de fichiers ou les noms de projet mais l'EDI ne changera pas automatiquement le chemin du projet ou les noms du chemin de la solution).
Ce qui suit est un exemple Python mais fonctionne de manière similaire pour C #, java ou C / C ++ en utilisant les includes, les espaces de noms ou en utilisant les commandes de code appropriées à chaque langage pour trouver du code dans d'autres classes / projets dans le MÊME ESPACE DE RÉPERTOIRE.
Le fichier d'application "hello world" importé à partir d'autres fichiers de code dans le même répertoire.
Notez que les délimiteurs d'espaces blancs python ne s'espacent pas 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 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 réellement le désordre dans lequel l'EDI vous entraîne? Pour importer du code à partir d'un autre fichier dans le même espace de répertoire, ajoutez une référence à celui-ci.
OK, alors maintenant que ce problème est résolu, comment liez-vous vraiment deux projets distincts dans le même espace de solution?
Microsoft a vraiment, vraiment besoin de résoudre ces problèmes afin que vous puissiez 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 des 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 chevronnés, mais si injustes pour les nouveaux développeurs par défaut.
J'espère que cela vous aide 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 voulez simplement taper le bon code ... c'est aussi pourquoi le tunnel essaie de corriger votre code mais ne vous aide pas à résoudre le problème. C'est probablement le problème le plus courant décrit en permanence sur stackoverflow avec de mauvaises réponses qui ne fonctionnent pas pour les nouveaux programmeurs.
La première étape consiste à faire référence P2 P1 en procédant comme suit
Ensuite, vous devrez vous assurer que les classes de P1 sont accessibles à P2. Le moyen le plus simple est de les fabriquer public.
public class MyType { ... }
Vous devriez maintenant pouvoir les utiliser en 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 est cependant d'ajouter une utilisation pour Project1afin que vous puissiez utiliser les types sans qualification
using Project1;
...
public void Example() {
MyType obj = new MyType();
}
Si vous avez deux projets dans un dossier de solution, ajoutez simplement la référence du projet dans un autre, en utilisant l'espace de noms, vous pouvez obtenir les classes. Lors de la création de l'objet pour cela, la classe requise. Appelez la méthode que vous voulez.
Premier projet:
class FirstClass()
{
public string Name()
{
return "James";
}
}
Ajoutez ici une référence au deuxième projet
Deuxième projet:
class SeccondClass
{
FirstProject.FirstClass obj=new FirstProject.FirstClass();
obj.Name();
}
Dans le projet P1, rendez 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, restez fidèle à la suggestion ci-dessus.)
Supposons que votre classe dans le projet 2 s'appelle MyClass.
Evidemment, commencez par référencer votre projet 2 sous les références du projet 1 puis
using namespaceOfProject2;
// for the class calling bit:
namespaceOfProject2.MyClass project2Class = new namespaceOfProject2.MyClass();
Ainsi, chaque fois que vous souhaitez référencer cette classe, vous tapez project2Class. De plus, assurez-vous que cette classe est également publique.
J'ai eu un problème avec différents frameworks cibles.
Je faisais tout correctement, mais je ne pouvais tout simplement pas utiliser la référence en P2. Après avoir défini le même cadre cible pour P1 et P2, cela a fonctionné comme un charme.
J'espère que cela aidera quelqu'un
The name ... does not exist in the current context. Cannot resolve symbol ...jusqu'à ce que je change les cadres cibles des projets pour qu'ils correspondent. (Cliquez avec le bouton droit sur le projet et accédez à Project -> Properties -> Target frameworkpour changer cela.)