In der gleichen Lösung habe ich zwei Projekte: P1 und P2. Wie kann ich eine Klasse von P1 in P2 verwenden?
In der gleichen Lösung habe ich zwei Projekte: P1 und P2. Wie kann ich eine Klasse von P1 in P2 verwenden?
Antworten:
Fügen Sie einfach einen Verweis auf P1 von P2 hinzu
Beachten Sie, dass die Typen in P1, auf die Sie direkt zugreifen möchten, eine ausreichende Zugriffsebene haben müssen. In der Regel bedeutet dies, dass sie veröffentlicht werden müssen.
Paul Ruane hat recht, ich habe gerade versucht, das Projekt aufzubauen. Ich habe gerade eine ganze SLN erstellt, um zu testen, ob es funktioniert.
Ich habe das in VC # VS2008 gemacht
<< (Ich helfe nur anderen Leuten, die dies lesen, mit () Kommentaren)
Schritt 1:
Machen Sie eine Lösung namens DoubleProject
Schritt 2:
Projekt in Lösung mit dem Namen DoubleProjectTwo erstellen (dazu die Lösungsdatei auswählen, Rechtsklick -> Hinzufügen -> Neues Projekt)
Ich habe jetzt zwei Projekte in der gleichen Lösung
Schritt 3:
Wie Paul Ruane sagte. Gehen Sie zu Referenzen im Lösungs-Explorer (wenn geschlossen, befindet es sich auf der Registerkarte Ansicht des Compilers). DoubleProjectTwo ist dasjenige, das Funktionen / Methoden von DoubleProject benötigt, also in DoubleProjectTwo mit der rechten Maustaste dort -> Hinzufügen -> Projekte -> DoubleProject.
Schritt 4:
Fügen Sie die Direktive für den Namespace ein:
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();
}
}
}
Schritt 5:
Lassen Sie mir einen Ergebnisnachweis zeigen:
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;
}
}
}
Die Haupt
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();
}
}
}
Das sollte den Trick machen
Hoffe das hilft
EDIT ::: whoops hat den Methodenaufruf vergessen, um den String tatsächlich zu ändern, mach nicht dasselbe :)
Allzu oft stellt ein neuer Entwickler diese einfache Frage, die speziell bei Visual Studio-IDEs häufig auftritt. Nur wenige Menschen beantworten die spezifische Frage und kritisieren die Frage häufig oder geben "Vermutungen" für Lösungen an, die die allgemeinen Probleme nicht beantworten. Das erste häufig auftretende Problem ist, dass Sie mit der IDE neue Projekte erstellen, anstatt der vorhandenen Lösung neue Dateien (.java, .py, .cpp, .c) hinzuzufügen (standardmäßig wird eine neue Lösung erstellt), es sei denn, Sie ändern den Projektnamen und zur aktuellen Lösung hinzufügen. Dieses Problem tritt bei Python-, Java-, C # -, C ++ - und C-Projektordnern auf.
Dies ist nicht der Fall, wenn Sie ein anderes Projekt mit den Befehlen new> project> project type der IDE hinzufügen. Das Problem hierbei ist, dass das neue Projekt in einem anderen Verzeichnis als die vorhandenen Client- oder Benutzeroberflächen-Codedateien gespeichert wird. Um eine neue "Datei" im selben Projektbereich anstatt in einem neuen Projekt zu erstellen, muss der Anfänger Folgendes tun, was Microsoft nicht für Sie tut und Sie sogar von dem intuitiv Offensichtlichen in die Irre führt.
JETZT funktionieren die Codeempfehlungen zum Importieren von Bibliotheken oder zum Verwenden von Namespaces wie in den obigen Kommentaren beschrieben, und Sie müssen weder Pfadanweisungen noch Lösungspfade und Lösungsnamen ändern, die Microsoft nicht einfach ändern lässt (dh Sie können die ändern Dateinamen oder Projektnamen, aber die IDE ändert den Projektpfad oder die Lösungspfadnamen nicht automatisch.
Das Folgende ist ein Python-Beispiel, funktioniert jedoch ähnlich für C #, Java oder C / C ++ unter Verwendung der Includes, Namespaces oder unter Verwendung von Codebefehlen, die für jede Sprache geeignet sind, um Code in anderen Klassen / Projekten im SAME DIRECTORY SPACE zu finden.
Die Anwendungsdatei "Hallo Welt", die aus anderen Codedateien im selben Verzeichnis importiert wird.
Beachten Sie, dass die Python-Leerzeichen-Trennzeichen in diesem Stackoverflow-Kommentareditor nicht korrekt platziert werden:
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
Die Bibliotheksdatei oder "Fassadendatei" mit Klassen, Methoden oder Funktionen, die Sie importieren möchten.
class class1(object):
"""description of class"""
class ClassA(object):
print ("test2")
def methodA():
print ("test3")
def functionA ():
print ("test4")
return (0)
pass
JETZT, wie lösen Sie das Chaos, in das Sie die IDE führt? Um Code aus einer anderen Datei im selben Verzeichnisbereich zu importieren, fügen Sie einen Verweis darauf hinzu.
OK, nachdem Sie dieses Problem gelöst haben, wie können Sie wirklich zwei separate Projekte im selben Lösungsbereich miteinander verbinden?
Microsoft muss dieses Problem wirklich beheben, damit Sie intuitiv erstellen können, was die meisten Benutzer als neue Dateien in denselben Verzeichnissen erstellen möchten, und Lösungen entfernen können, indem Sie sie auswählen und aus der IDE löschen. Anfänger sind so frustriert über Verzeichnispfadanweisungen, die für erfahrene Entwickler so flexibel, für neue Entwickler jedoch in ihren Standardeinstellungen so unfair sind.
Ich hoffe, dies hilft Ihnen wirklich neuen Leuten und verhindert, dass erfahrene Entwickler Ihnen die falschen Antworten geben, die für Sie nicht funktionieren. Sie gehen davon aus, dass Sie die Pfadanweisungen bereits verstehen und nur den richtigen Code eingeben möchten. Aus diesem Grund versucht der Tunnel, Ihren Code zu korrigieren, hilft Ihnen jedoch nicht, das Problem zu beheben. Dies ist wahrscheinlich das häufigste Problem, das im Stackoverflow ständig mit falschen Antworten beschrieben wird, die für neue Programmierer nicht funktionieren.
Der erste Schritt besteht darin, P2 als Referenz P1 zu verwenden, indem Folgendes ausgeführt wird
Als nächstes müssen Sie sicherstellen, dass die Klassen in P1 für P2 zugänglich sind. Der einfachste Weg ist, sie zu machen public.
public class MyType { ... }
Jetzt sollten Sie sie in P2 über ihren vollständig qualifizierten Namen verwenden können. Angenommen, der Namespace von P1 ist Project1, dann würde Folgendes funktionieren
Project1.MyType obj = new Project1.MyType();
Der bevorzugte Weg ist jedoch, eine Verwendung für hinzuzufügen, Project1damit Sie die Typen ohne Qualifikation verwenden können
using Project1;
...
public void Example() {
MyType obj = new MyType();
}
Wenn Sie zwei Projekte in einem Lösungsordner haben. Fügen Sie einfach die Referenz des Projekts in einen anderen ein. Verwenden Sie den Namespace, um die Klassen abzurufen. Beim Erstellen des Objekts dafür die erforderliche Klasse. Rufen Sie die gewünschte Methode auf.
Erstes Projekt:
class FirstClass()
{
public string Name()
{
return "James";
}
}
Fügen Sie hier einen Verweis auf das zweite Projekt hinzu
Zweites Projekt:
class SeccondClass
{
FirstProject.FirstClass obj=new FirstProject.FirstClass();
obj.Name();
}
Machen Sie im Projekt P1 die Klasse öffentlich (falls noch nicht geschehen). Fügen Sie dann P2 eine Projektreferenz hinzu (anstelle einer Dateireferenz, ein Fehler, auf den ich gelegentlich gestoßen bin). Fügen Sie an der richtigen Stelle eine using-Anweisung in P2 hinzu und beginnen Sie mit der Verwendung der Klasse ab P1.
(Um dies zu erwähnen: Die Alternative zur Veröffentlichung der Klasse wäre, P2 zu einem Freund von P1 zu machen. Dies ist jedoch wahrscheinlich nicht die Antwort, nach der Sie suchen, da dies einige Konsequenzen hätte. Halten Sie sich also an den obigen Vorschlag.)
Angenommen, Ihre Klasse in Projekt 2 heißt MyClass.
Verweisen Sie dann zuerst auf Ihr Projekt 2 unter Verweise in Projekt 1
using namespaceOfProject2;
// for the class calling bit:
namespaceOfProject2.MyClass project2Class = new namespaceOfProject2.MyClass();
Wenn Sie also auf diese Klasse verweisen möchten, geben Sie project2Class ein. Stellen Sie außerdem sicher, dass die Klasse auch öffentlich ist.
Ich hatte ein Problem mit verschiedenen Ziel-Frameworks.
Ich habe alles richtig gemacht, konnte aber die Referenz in P2 einfach nicht verwenden. Nachdem ich das gleiche Ziel-Framework für P1 und P2 festgelegt hatte, funktionierte es wie ein Zauber.
Hoffe es wird jemandem helfen
The name ... does not exist in the current context. Cannot resolve symbol ...bis ich die Ziel-Frameworks der Projekte entsprechend geändert habe. (Klicken Sie mit der rechten Maustaste auf das Projekt und gehen Sie zu Project -> Properties -> Target framework, um dies zu ändern.)